日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EduCoder 机器学习 决策树

發(fā)布時間:2024/5/17 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EduCoder 机器学习 决策树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

決策樹說通俗點就是一棵能夠替我們做決策的樹,或者說是我們?nèi)祟愒谝鰶Q策時腦回路的一種表現(xiàn)形式。

本實訓(xùn)項目的主要內(nèi)容是基于 python 語言搭建出決策樹模型對數(shù)據(jù)分類,并使用 sklearn 的決策時模型對鳶尾花數(shù)據(jù)進行分類。

第1關(guān):什么是決策樹

  • 任務(wù)描述
  • 相關(guān)知識
    • 引例
    • 決策樹的相關(guān)概念
  • 編程要求
  • 測試說明

任務(wù)描述

本關(guān)任務(wù):根據(jù)本節(jié)課所學(xué)知識完成本關(guān)所設(shè)置的選擇題。

相關(guān)知識

為了完成本關(guān)任務(wù),你需要掌握決策樹的相關(guān)基礎(chǔ)知識。

引例

在炎熱的夏天,沒有什么比冰鎮(zhèn)后的西瓜更能令人感到心曠神怡的了。現(xiàn)在我要去水果店買西瓜,但什么樣的西瓜能入我法眼呢?那根據(jù)我的個人習(xí)慣,在挑西瓜時可能就有這樣的腦回路。

假設(shè)現(xiàn)在水果店里有3個西瓜,它們的屬性如下:

編號瓤是否夠紅夠不夠冰是否便宜是否有籽
1
2
3

那么根據(jù)我的腦回路我會買1和2號西瓜。

其實我的腦回路可以看成一棵樹,并且這棵樹能夠幫助我對買不買西瓜這件事做決策,所以它就是一棵決策樹

決策樹的相關(guān)概念

決策樹是一種可以用于分類與回歸的機器學(xué)習(xí)算法,但主要用于分類。用于分類的決策樹是一種描述對實例進行分類的樹形結(jié)構(gòu)。決策樹由結(jié)點組成,其中結(jié)點分為內(nèi)部結(jié)點葉子結(jié)點內(nèi)部結(jié)點表示一個特征或者屬性,葉子結(jié)點表示標簽(腦回路圖中黃色的是內(nèi)部結(jié)點,藍色的是葉子結(jié)點)。

從代碼角度來看,決策樹其實可以看成是一堆if-else語句的集合,例如引例中的決策樹完全可以看成是如下代碼:

  • if isRed:
  • if isCold:
  • if hasSeed:
  • print("buy")
  • else:
  • print("don't buy")
  • else:
  • if isCheap:
  • print("buy")
  • else:
  • print("don't buy")
  • else:
  • print("don't buy")
  • 因此決策樹的一個非常大的優(yōu)勢就是模型的可理解性非常高,甚至可以用來挖掘數(shù)據(jù)中比較重要的信息。

    那么如何構(gòu)造出一棵好的決策樹呢?其實構(gòu)造決策樹時會遵循一個指標,有的是按照信息增益來構(gòu)建,如ID3算法;有的是信息增益率來構(gòu)建,如C4.5算法;有的是按照基尼系數(shù)來構(gòu)建的,如CART算法。但不管是使用哪種構(gòu)建算法,決策樹的構(gòu)建過程通常都是一個遞歸選擇最優(yōu)特征,并根據(jù)特征對訓(xùn)練集進行分割,使得對各個子數(shù)據(jù)集有一個最好的分類的過程。

    這一過程對應(yīng)著對特征空間的劃分,也對應(yīng)著決策樹的構(gòu)建。一開始,構(gòu)建決策樹的根結(jié)點,將所有訓(xùn)練數(shù)據(jù)都放在根結(jié)點。選擇一個最優(yōu)特征,并按照這一特征將訓(xùn)練數(shù)據(jù)集分割成子集,使得各個子集有一個在當(dāng)前條件下最好的分類。如果這些子集已經(jīng)能夠被基本正確分類,那么構(gòu)建葉子結(jié)點,并將這些子集分到所對應(yīng)的葉結(jié)點中去;如果還有子集不能被基本正確分類,那么就對這些子集選擇新的最優(yōu)特征,繼續(xù)對其進行分割,并構(gòu)建相應(yīng)的結(jié)點。如此遞歸進行下去,直至所有訓(xùn)練數(shù)據(jù)子集被基本正確分類,或者沒有合適的特征為止。最后每個子集都被分到葉子結(jié)點上,即都有了明確的類別。這就構(gòu)建出了一棵決策樹。

    編程要求

    根據(jù)本關(guān)所學(xué)習(xí)到的知識,完成所有選擇題。

    測試說明

    平臺會對你的選項進行判斷,如果實際輸出結(jié)果與預(yù)期結(jié)果相同,則通關(guān);反之,則 GameOver。


    開始你的任務(wù)吧,祝你成功!

    • 1、下列說法正確的是?(AB)

      A、

      訓(xùn)練決策樹的過程就是構(gòu)建決策樹的過程

      B、

      ID3算法是根據(jù)信息增益來構(gòu)建決策樹

      C、

      C4.5算法是根據(jù)基尼系數(shù)來構(gòu)建決策樹

      D、

      決策樹模型的可理解性不高

    • 2、下列說法錯誤的是?(B)

      A、

      從樹的根節(jié)點開始,根據(jù)特征的值一步一步走到葉子節(jié)點的過程是決策樹做決策的過程

      B、

      決策樹只能是一棵二叉樹

      C、

      根節(jié)點所代表的特征是最優(yōu)特征

    第2關(guān):信息熵與信息增益

    • 任務(wù)描述
    • 相關(guān)知識
      • 信息熵
      • 條件熵
      • 信息增益
    • 編程要求
    • 測試說明

    任務(wù)描述

    本關(guān)任務(wù):掌握什么是信息增益,完成計算信息增益的程序設(shè)計。

    相關(guān)知識

    為了完成本關(guān)任務(wù),你需要掌握:

    • 信息熵;

    • 條件熵;

    • 信息增益。

    信息熵

    信息是個很抽象的概念。人們常常說信息很多,或者信息較少,但卻很難說清楚信息到底有多少。比如一本五十萬字的中文書到底有多少信息量。

    直到1948年,香農(nóng)提出了“信息熵”的概念,才解決了對信息的量化度量問題。信息熵這個詞是香農(nóng)從熱力學(xué)中借用過來的。熱力學(xué)中的熱熵是表示分子狀態(tài)混亂程度的物理量。香農(nóng)用信息熵的概念來描述信源的不確定度。信源的不確定性越大,信息熵也越大

    從機器學(xué)習(xí)的角度來看,信息熵表示的是信息量的期望值。如果數(shù)據(jù)集中的數(shù)據(jù)需要被分成多個類別,則信息量I(xi?)的定義如下(其中xi?表示多個類別中的第i個類別,p(xi?)數(shù)據(jù)集中類別為xi?的數(shù)據(jù)在數(shù)據(jù)集中出現(xiàn)的概率表示):

    I(Xi?)=?log2?p(xi?)

    由于信息熵是信息量的期望值,所以信息熵H(X)的定義如下(其中n為數(shù)據(jù)集中類別的數(shù)量):

    H(X)=?sumi=1n?p(xi?)log2?p(xi?)

    從這個公式也可以看出,如果概率是0或者是1的時候,熵就是0(因為這種情況下隨機變量的不確定性是最低的)。那如果概率是0.5,也就是五五開的時候,此時熵達到最大,也就是1。(就像扔硬幣,你永遠都猜不透你下次扔到的是正面還是反面,所以它的不確定性非常高)。所以呢,熵越大,不確定性就越高

    條件熵

    在實際的場景中,我們可能需要研究數(shù)據(jù)集中某個特征等于某個值時的信息熵等于多少,這個時候就需要用到條件熵。條件熵H(Y|X)表示特征X為某個值的條件下,類別為Y的熵。條件熵的計算公式如下:

    H(YX)=sumi=1n?pi?H(YX=xi?)

    當(dāng)然條件熵的性質(zhì)也和熵的性質(zhì)一樣,概率越確定,條件熵就越小,概率越五五開,條件熵就越大。

    信息增益

    現(xiàn)在已經(jīng)知道了什么是熵,什么是條件熵。接下來就可以看看什么是信息增益了。所謂的信息增益就是表示我已知條件X后能得到信息Y的不確定性的減少程度。

    就好比,我在玩讀心術(shù)。你心里想一件東西,我來猜。我已開始什么都沒問你,我要猜的話,肯定是瞎猜。這個時候我的熵就非常高。然后我接下來我會去試著問你是非題,當(dāng)我問了是非題之后,我就能減小猜測你心中想到的東西的范圍,這樣其實就是減小了我的熵。那么我熵的減小程度就是我的信息增益。

    所以信息增益如果套上機器學(xué)習(xí)的話就是,如果把特征A對訓(xùn)練集D的信息增益記為g(D, A)的話,那么g(D, A)的計算公式就是:

    g(D,A)=H(D)?H(D,A)

    為了更好的解釋熵,條件熵,信息增益的計算過程,下面通過示例來描述。假設(shè)我現(xiàn)在有這一個數(shù)據(jù)集,第一列是編號,第二列是性別,第三列是活躍度,第四列是客戶是否流失的標簽(0表示未流失,1表示流失)。

    編號性別活躍度是否流失
    10
    20
    31
    40
    50
    60
    71
    80
    91
    100
    110
    121
    131
    140
    150

    假如要算性別和活躍度這兩個特征的信息增益的話,首先要先算總的熵和條件熵。總的熵其實非常好算,就是把標簽作為隨機變量X。上表中標簽只有兩種(0和1)因此隨機變量X的取值只有0或者1。所以要計算熵就需要先分別計算標簽為0的概率和標簽為1的概率。從表中能看出標簽為0的數(shù)據(jù)有10條,所以標簽為0的概率等于2/3。標簽為1的概率為1/3。所以熵為:

    ?(1/3)?log(1/3)?(2/3)?log(2/3)=0.9182

    接下來就是條件熵的計算,以性別為男的熵為例。表格中性別為男的數(shù)據(jù)有8條,這8條數(shù)據(jù)中有3條數(shù)據(jù)的標簽為1,有5條數(shù)據(jù)的標簽為0。所以根據(jù)條件熵的計算公式能夠得出該條件熵為:

    ?(3/8)?log(3/8)?(5/8)?log(5/8)=0.9543

    根據(jù)上述的計算方法可知,總熵為:

    ?(5/15)?log(5/15)?(10/15)?log(10/15)=0.9182

    性別為男的熵為:

    ?(3/8)?log(3/8)?(5/8)?log(5/8)=0.9543

    性別為女的熵為:

    ?(2/7)?log(2/7)?(5/7)?log(5/7)=0.8631

    活躍度為低的熵為:

    ?(4/4)?log(4/4)?0=0

    活躍度為中的熵為:

    ?(1/5)?log(1/5)?(4/5)?log(4/5)=0.7219

    活躍度為高的熵為:

    ?0?(6/6)?log(6/6)=0

    現(xiàn)在有了總的熵和條件熵之后就能算出性別和活躍度這兩個特征的信息增益了。

    性別的信息增益=總的熵-(8/15)*性別為男的熵-(7/15)*性別為女的熵=0.0064

    *活躍度的信息增益=總的熵-(6/15)活躍度為高的熵-(5/15)*活躍度為中的熵-(4/15)*活躍度為低的熵=0.6776

    那信息增益算出來之后有什么意義呢?回到讀心術(shù)的問題,為了我能更加準確的猜出你心中所想,我肯定是問的問題越好就能猜得越準!換句話來說我肯定是要想出一個信息增益最大(減少不確定性程度最高)的問題來問你。其實ID3算法也是這么想的。ID3算法的思想是從訓(xùn)練集D中計算每個特征的信息增益,然后看哪個最大就選哪個作為當(dāng)前結(jié)點。然后繼續(xù)重復(fù)剛剛的步驟來構(gòu)建決策樹。

    編程要求

    根據(jù)提示,在右側(cè)編輯器補充代碼,完成calcInfoGain函數(shù)實現(xiàn)計算信息增益。

    calcInfoGain函數(shù)中的參數(shù):

    • feature:測試用例中字典里的feature,類型為ndarray;

    • label:測試用例中字典里的label,類型為ndarray;

    • index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算信息增益。

    測試說明

    平臺會對你編寫的代碼進行測試,期望您的代碼根據(jù)輸入來輸出正確的信息增益,以下為其中一個測試用例:

    測試輸入: {'feature':[[0, 1], [1, 0], [1, 2], [0, 0], [1, 1]], 'label':[0, 1, 0, 0, 1], 'index': 0}

    預(yù)期輸出: 0.419973

    提示: 計算log可以使用NumPy中的log2函數(shù)


    開始你的任務(wù)吧,祝你成功!

    import numpy as npdef calcInfoGain(feature, label, index):'''計算信息增益:param feature:測試用例中字典里的feature,類型為ndarray:param label:測試用例中字典里的label,類型為ndarray:param index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算信息增益。:return:信息增益,類型float'''#*********** Begin ***********## 計算熵def calcInfoEntropy(feature, label):'''計算信息熵:param feature:數(shù)據(jù)集中的特征,類型為ndarray:param label:數(shù)據(jù)集中的標簽,類型為ndarray:return:信息熵,類型float'''label_set = set(label)result = 0for l in label_set:count = 0for j in range(len(label)):if label[j] == l:count += 1# 計算標簽在數(shù)據(jù)集中出現(xiàn)的概率p = count / len(label)# 計算熵result -= p * np.log2(p)return result# 計算條件熵def calcHDA(feature, label, index, value):'''計算信息熵:param feature:數(shù)據(jù)集中的特征,類型為ndarray:param label:數(shù)據(jù)集中的標簽,類型為ndarray:param index:需要使用的特征列索引,類型為int:param value:index所表示的特征列中需要考察的特征值,類型為int:return:信息熵,類型float'''count = 0# sub_feature和sub_label表示根據(jù)特征列和特征值分割出的子數(shù)據(jù)集中的特征和標簽sub_feature = []sub_label = []for i in range(len(feature)):if feature[i][index] == value:count += 1sub_feature.append(feature[i])sub_label.append(label[i])pHA = count / len(feature)e = calcInfoEntropy(sub_feature, sub_label)return pHA * ebase_e = calcInfoEntropy(feature, label)f = np.array(feature)# 得到指定特征列的值的集合f_set = set(f[:, index])sum_HDA = 0# 計算條件熵for value in f_set:sum_HDA += calcHDA(feature, label, index, value)# 計算信息增益return base_e - sum_HDA#*********** End *************#

    第3關(guān):使用ID3算法構(gòu)建決策樹

    • 任務(wù)描述
    • 相關(guān)知識
      • ID3算法
      • 使用決策樹進行預(yù)測
    • 編程要求
    • 測試說明

    任務(wù)描述

    本關(guān)任務(wù):補充python代碼,完成DecisionTree類中的fit和predict函數(shù)。

    相關(guān)知識

    為了完成本關(guān)任務(wù),你需要掌握:

    • ID3算法構(gòu)造決策樹的流程;

    • 如何使用構(gòu)造好的決策樹進行預(yù)測。

    ID3算法

    ID3算法其實就是依據(jù)特征的信息增益來構(gòu)建樹的。其大致步驟就是從根結(jié)點開始,對結(jié)點計算所有可能的特征的信息增益,然后選擇信息增益最大的特征作為結(jié)點的特征,由該特征的不同取值建立子結(jié)點,然后對子結(jié)點遞歸執(zhí)行上述的步驟直到信息增益很小或者沒有特征可以繼續(xù)選擇為止。

    因此,ID3算法偽代碼如下:

  • #假設(shè)數(shù)據(jù)集為D,標簽集為A,需要構(gòu)造的決策樹為tree
  • def ID3(D, A):
  • if D中所有的標簽都相同:
  • return 標簽
  • if 樣本中只有一個特征或者所有樣本的特征都一樣:
  • D中所有的標簽進行計數(shù)
  • return 計數(shù)最高的標簽
  • 計算所有特征的信息增益
  • 選出增益最大的特征作為最佳特征(best_feature)
  • best_feature作為tree的根結(jié)點
  • 得到best_feature在數(shù)據(jù)集中所有出現(xiàn)過的值的集合(value_set)
  • for value in value_set:
  • D中篩選出best_feature=value的子數(shù)據(jù)集(sub_feature)
  • A中篩選出best_feature=value的子標簽集(sub_label)
  • #遞歸構(gòu)造tree
  • tree[best_feature][value] = ID3(sub_feature, sub_label)
  • return tree
  • 使用決策樹進行預(yù)測

    決策樹的預(yù)測思想非常簡單,假設(shè)現(xiàn)在已經(jīng)構(gòu)建出了一棵用來決策是否買西瓜的決策樹。

    并假設(shè)現(xiàn)在在水果店里有這樣一個西瓜,其屬性如下:

    瓤是否夠紅夠不夠冰是否便宜是否有籽

    那買不買這個西瓜呢?只需把西瓜的屬性代入決策樹即可。決策樹的根結(jié)點是瓤是否夠紅,所以就看西瓜的屬性,經(jīng)查看發(fā)現(xiàn)夠紅,因此接下來就看夠不夠冰。而西瓜不夠冰,那么看是否便宜。發(fā)現(xiàn)西瓜是便宜的,所以這個西瓜是可以買的。

    因此使用決策樹進行預(yù)測的偽代碼也比較簡單,偽代碼如下:

  • #tree表示決策樹,feature表示測試數(shù)據(jù)
  • def predict(tree, feature):
  • if tree是葉子結(jié)點:
  • return tree
  • 根據(jù)feature中的特征值走入tree中對應(yīng)的分支
  • if 分支依然是課樹:
  • result = predict(分支, feature)
  • return result
  • 編程要求

    填寫fit(self, feature, label)函數(shù),實現(xiàn)ID3算法,要求決策樹保存在self.tree中。其中:

    • feature:訓(xùn)練集數(shù)據(jù),類型為ndarray,數(shù)值全為整數(shù);

    • label:訓(xùn)練集標簽,類型為ndarray,數(shù)值全為整數(shù)。

    填寫predict(self, feature)函數(shù),實現(xiàn)預(yù)測功能,并將標簽返回,其中:

    • feature:測試集數(shù)據(jù),類型為ndarray,數(shù)值全為整數(shù)。(PS:feature中有多條數(shù)據(jù))

    測試說明

    只需完成fit與predict函數(shù)即可,程序內(nèi)部會調(diào)用您所完成的fit函數(shù)構(gòu)建模型并調(diào)用predict函數(shù)來對數(shù)據(jù)進行預(yù)測。預(yù)測的準確率高于0.92視為過關(guān)。(PS:若self.tree is None則會打印決策樹構(gòu)建失敗)


    開始你的任務(wù)吧,祝你成功!

    import numpy as np class DecisionTree(object):def __init__(self):#決策樹模型self.tree = {}def calcInfoGain(self, feature, label, index):'''計算信息增益:param feature:測試用例中字典里的feature,類型為ndarray:param label:測試用例中字典里的label,類型為ndarray:param index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算信息增益。:return:信息增益,類型float'''# 計算熵def calcInfoEntropy(label):'''計算信息熵:param label:數(shù)據(jù)集中的標簽,類型為ndarray:return:信息熵,類型float'''label_set = set(label)result = 0for l in label_set:count = 0for j in range(len(label)):if label[j] == l:count += 1# 計算標簽在數(shù)據(jù)集中出現(xiàn)的概率p = count / len(label)# 計算熵result -= p * np.log2(p)return result# 計算條件熵def calcHDA(feature, label, index, value):'''計算信息熵:param feature:數(shù)據(jù)集中的特征,類型為ndarray:param label:數(shù)據(jù)集中的標簽,類型為ndarray:param index:需要使用的特征列索引,類型為int:param value:index所表示的特征列中需要考察的特征值,類型為int:return:信息熵,類型float'''count = 0# sub_feature和sub_label表示根據(jù)特征列和特征值分割出的子數(shù)據(jù)集中的特征和標簽sub_feature = []sub_label = []for i in range(len(feature)):if feature[i][index] == value:count += 1sub_feature.append(feature[i])sub_label.append(label[i])pHA = count / len(feature)e = calcInfoEntropy(sub_label)return pHA * ebase_e = calcInfoEntropy(label)f = np.array(feature)# 得到指定特征列的值的集合f_set = set(f[:, index])sum_HDA = 0# 計算條件熵for value in f_set:sum_HDA += calcHDA(feature, label, index, value)# 計算信息增益return base_e - sum_HDA# 獲得信息增益最高的特征def getBestFeature(self, feature, label):max_infogain = 0best_feature = 0for i in range(len(feature[0])):infogain = self.calcInfoGain(feature, label, i)if infogain > max_infogain:max_infogain = infogainbest_feature = ireturn best_featuredef createTree(self, feature, label):# 樣本里都是同一個label沒必要繼續(xù)分叉了if len(set(label)) == 1:return label[0]# 樣本中只有一個特征或者所有樣本的特征都一樣的話就看哪個label的票數(shù)高if len(feature[0]) == 1 or len(np.unique(feature, axis=0)) == 1:vote = {}for l in label:if l in vote.keys():vote[l] += 1else:vote[l] = 1max_count = 0vote_label = Nonefor k, v in vote.items():if v > max_count:max_count = vvote_label = kreturn vote_label# 根據(jù)信息增益拿到特征的索引best_feature = self.getBestFeature(feature, label)tree = {best_feature: {}}f = np.array(feature)# 拿到bestfeature的所有特征值f_set = set(f[:, best_feature])# 構(gòu)建對應(yīng)特征值的子樣本集sub_feature, sub_labelfor v in f_set:sub_feature = []sub_label = []for i in range(len(feature)):if feature[i][best_feature] == v:sub_feature.append(feature[i])sub_label.append(label[i])# 遞歸構(gòu)建決策樹tree[best_feature][v] = self.createTree(sub_feature, sub_label)return treedef fit(self, feature, label):''':param feature: 訓(xùn)練集數(shù)據(jù),類型為ndarray:param label:訓(xùn)練集標簽,類型為ndarray:return: None'''#************* Begin ************#self.tree = self.createTree(feature, label)#************* End **************#def predict(self, feature):''':param feature:測試集數(shù)據(jù),類型為ndarray:return:預(yù)測結(jié)果,如np.array([0, 1, 2, 2, 1, 0])'''#************* Begin ************#result = []def classify(tree, feature):if not isinstance(tree, dict):return treet_index, t_value = list(tree.items())[0]f_value = feature[t_index]if isinstance(t_value, dict):classLabel = classify(tree[t_index][f_value], feature)return classLabelelse:return t_valuefor f in feature:result.append(classify(self.tree, f))return np.array(result)#************* End **************#

    第4關(guān):信息增益率

    • 任務(wù)描述
    • 相關(guān)知識
      • 信息增益率
    • 編程要求
    • 測試說明

    任務(wù)描述

    本關(guān)任務(wù):根據(jù)本關(guān)所學(xué)知識,完成calcInfoGainRatio函數(shù)。

    相關(guān)知識

    為了完成本關(guān)任務(wù),你需要掌握:信息增益率

    信息增益率

    由于在使用信息增益這一指標進行劃分時,更喜歡可取值數(shù)量較多的特征。為了減少這種偏好可能帶來的不利影響,Ross Quinlan使用了信息增益率這一指標來選擇最優(yōu)劃分屬性。

    信息增益率的數(shù)學(xué)定義為如下,其中D表示數(shù)據(jù)集,a表示數(shù)據(jù)集中的某一列,Gain(D,a)表示Da的信息增益,V表示a這一列中取值的集合,v表示V中的某種取值,D表示D中樣本的數(shù)量,Dv表示Da這一列中值等于v的數(shù)量。

    Gain_ratio(D,a)=?v=1V?DDv?log2?DDv?Gain(D,a)?

    從公式可以看出,信息增益率很好算,只是用信息增益除以另一個分母,該分母通常稱為固有值。舉個例子,還是使用第二關(guān)中提到過的數(shù)據(jù)集,第一列是編號,第二列是性別,第三列是活躍度,第四列是客戶是否流失的標簽(0表示未流失,1表示流失)。

    編號性別活躍度是否流失
    10
    20
    31
    40
    50
    60
    71
    80
    91
    100
    110
    121
    131
    140
    150

    根據(jù)第二關(guān)已經(jīng)知道性別的信息增益為0.0064,設(shè)a為性別,則有Gain(D,a)=0.0064。由根據(jù)數(shù)據(jù)可知,V=2,假設(shè)當(dāng)v=1時表示性別為男,v=2時表示性別為女,則有D=15D1=8D2=7。因此根據(jù)信息增益率的計算公式可知Gainr?atio(D,a)=0.0642。同理可以算出活躍度的信息增益率為0.4328

    編程要求

    根據(jù)提示,在右側(cè)編輯器補充代碼,完成calcInfoGainRatio函數(shù)實現(xiàn)計算信息增益。

    calcInfoGainRatio函數(shù)中的參數(shù):

    • feature:測試用例中字典里的feature,類型為ndarray;

    • label:測試用例中字典里的label,類型為ndarray;

    • index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算信息增益率。

    測試說明

    平臺會對你編寫的代碼進行測試,期望您的代碼根據(jù)輸入來輸出正確的信息增益,以下為其中一個測試用例:

    測試輸入: {'feature':[[0, 1], [1, 0], [1, 2], [0, 0], [1, 1]], 'label':[0, 1, 0, 0, 1], 'index': 0}

    預(yù)期輸出: 0.432538

    提示: 計算log可以使用NumPy中的log2函數(shù)


    開始你的任務(wù)吧,祝你成功!

    import numpy as npdef calcInfoGain(feature, label, index):'''計算信息增益:param feature:測試用例中字典里的feature,類型為ndarray:param label:測試用例中字典里的label,類型為ndarray:param index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算信息增益。:return:信息增益,類型float'''# 計算熵def calcInfoEntropy(label):'''計算信息熵:param label:數(shù)據(jù)集中的標簽,類型為ndarray:return:信息熵,類型float'''label_set = set(label)result = 0for l in label_set:count = 0for j in range(len(label)):if label[j] == l:count += 1# 計算標簽在數(shù)據(jù)集中出現(xiàn)的概率p = count / len(label)# 計算熵result -= p * np.log2(p)return result# 計算條件熵def calcHDA(feature, label, index, value):'''計算信息熵:param feature:數(shù)據(jù)集中的特征,類型為ndarray:param label:數(shù)據(jù)集中的標簽,類型為ndarray:param index:需要使用的特征列索引,類型為int:param value:index所表示的特征列中需要考察的特征值,類型為int:return:信息熵,類型float'''count = 0# sub_feature和sub_label表示根據(jù)特征列和特征值分割出的子數(shù)據(jù)集中的特征和標簽sub_feature = []sub_label = []for i in range(len(feature)):if feature[i][index] == value:count += 1sub_feature.append(feature[i])sub_label.append(label[i])pHA = count / len(feature)e = calcInfoEntropy(sub_label)return pHA * ebase_e = calcInfoEntropy(label)f = np.array(feature)# 得到指定特征列的值的集合f_set = set(f[:, index])sum_HDA = 0# 計算條件熵for value in f_set:sum_HDA += calcHDA(feature, label, index, value)# 計算信息增益return base_e - sum_HDAdef calcInfoGainRatio(feature, label, index):'''計算信息增益率:param feature:測試用例中字典里的feature,類型為ndarray:param label:測試用例中字典里的label,類型為ndarray:param index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算信息增益。:return:信息增益率,類型float'''#********* Begin *********#info_gain = calcInfoGain(feature, label, index)unique_value = list(set(feature[:, index]))IV = 0for value in unique_value:len_v = np.sum(feature[:, index] == value)IV -= (len_v/len(feature))*np.log2((len_v/len(feature)))return info_gain/IV#********* End *********#

    第5關(guān):基尼系數(shù)

    • 任務(wù)描述
    • 相關(guān)知識
      • 基尼系數(shù)
    • 編程要求
    • 測試說明

    任務(wù)描述

    本關(guān)任務(wù):根據(jù)本關(guān)所學(xué)知識,完成calcGini函數(shù)。

    相關(guān)知識

    為了完成本關(guān)任務(wù),你需要掌握:基尼系數(shù)。

    基尼系數(shù)

    在ID3算法中我們使用了信息增益來選擇特征,信息增益大的優(yōu)先選擇。在C4.5算法中,采用了信息增益率來選擇特征,以減少信息增益容易選擇特征值多的特征的問題。但是無論是ID3還是C4.5,都是基于信息論的熵模型的,這里面會涉及大量的對數(shù)運算。能不能簡化模型同時也不至于完全丟失熵模型的優(yōu)點呢?當(dāng)然有!那就是基尼系數(shù)

    CART算法使用基尼系數(shù)來代替信息增益率,基尼系數(shù)代表了模型的不純度,基尼系數(shù)越小,則不純度越低,特征越好。這和信息增益與信息增益率是相反的(它們都是越大越好)。

    基尼系數(shù)的數(shù)學(xué)定義為如下,其中D表示數(shù)據(jù)集,pk?表示D中第k個類別在D中所占比例。

    Gini(D)=1?sumk=1y?pk2?

    從公式可以看出,相比于信息增益和信息增益率,計算起來更加簡單。舉個例子,還是使用第二關(guān)中提到過的數(shù)據(jù)集,第一列是編號,第二列是性別,第三列是活躍度,第四列是客戶是否流失的標簽(0表示未流失,1表示流失)。

    編號性別活躍度是否流失
    10
    20
    31
    40
    50
    60
    71
    80
    91
    100
    110
    121
    131
    140
    150

    從表格可以看出,D中總共有2個類別,設(shè)類別為0的比例為p1?,則有p1?=1510?。設(shè)類別為1的比例為p2?,則有p2?=155?。根據(jù)基尼系數(shù)的公式可知Gini(D)=1?(p12?+p22?)=0.4444

    上面是基于數(shù)據(jù)集D的基尼系數(shù)的計算方法,那么基于數(shù)據(jù)集D與特征a的基尼系數(shù)怎樣計算呢?其實和信息增益率的套路差不多。計算公式如下:

    Gini(D,a)=sumv=1V?DDv?Gini(Dv)

    還是以用戶流失的數(shù)據(jù)為例,現(xiàn)在算一算性別的基尼系數(shù)。設(shè)性別男為v=1,性別女為v=2則有D=15D1=8D2=7Gini(D1)=0.46875Gini(D2)=0.40816。所以Gini(D,a)=0.44048

    編程要求

    根據(jù)提示,在右側(cè)編輯器補充代碼,完成calcGini函數(shù)實現(xiàn)計算信息增益。

    calcGini函數(shù)中的參數(shù):

    • feature:測試用例中字典里的feature,類型為ndarray;

    • label:測試用例中字典里的label,類型為ndarray;

    • index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算基尼系數(shù)。

    測試說明

    平臺會對你編寫的代碼進行測試,期望您的代碼根據(jù)輸入來輸出正確的信息增益,以下為其中一個測試用例:

    測試輸入: {'feature':[[0, 1], [1, 0], [1, 2], [0, 0], [1, 1]], 'label':[0, 1, 0, 0, 1], 'index': 0}

    預(yù)期輸出: 0.266667


    開始你的任務(wù)吧,祝你成功!

    import numpy as np def calcGini(feature, label, index):'''計算基尼系數(shù):param feature:測試用例中字典里的feature,類型為ndarray:param label:測試用例中字典里的label,類型為ndarray:param index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算信息增益。:return:基尼系數(shù),類型float'''#********* Begin *********#def _gini(label):unique_label = list(set(label))gini = 1for l in unique_label:p = np.sum(label == l)/len(label)gini -= p**2return giniunique_value = list(set(feature[:, index]))gini = 0for value in unique_value:len_v = np.sum(feature[:, index] == value)gini += (len_v/len(feature))*_gini(label[feature[:, index] == value])return gini#********* End *********#

    第6關(guān):預(yù)剪枝與后剪枝

    • 任務(wù)描述
    • 相關(guān)知識
      • 為什么需要剪枝
      • 預(yù)剪枝
      • 后剪枝
    • 編程要求
    • 測試說明

    任務(wù)描述

    本關(guān)任務(wù):補充python代碼,完成DecisionTree類中的fit和predict函數(shù)。

    相關(guān)知識

    為了完成本關(guān)任務(wù),你需要掌握:

    • 為什么需要剪枝;

    • 預(yù)剪枝;

    • 后剪枝。

    為什么需要剪枝

    決策樹的生成是遞歸地去構(gòu)建決策樹,直到不能繼續(xù)下去為止。這樣產(chǎn)生的樹往往對訓(xùn)練數(shù)據(jù)有很高的分類準確率,但對未知的測試數(shù)據(jù)進行預(yù)測就沒有那么準確了,也就是所謂的過擬合。

    決策樹容易過擬合的原因是在構(gòu)建決策樹的過程時會過多地考慮如何提高對訓(xùn)練集中的數(shù)據(jù)的分類準確率,從而會構(gòu)建出非常復(fù)雜的決策樹(樹的寬度和深度都比較大)。在之前的實訓(xùn)中已經(jīng)提到過,模型的復(fù)雜度越高,模型就越容易出現(xiàn)過擬合的現(xiàn)象。所以簡化決策樹的復(fù)雜度能夠有效地緩解過擬合現(xiàn)象,而簡化決策樹最常用的方法就是剪枝。剪枝分為預(yù)剪枝與后剪枝。

    預(yù)剪枝

    預(yù)剪枝的核心思想是在決策樹生成過程中,對每個結(jié)點在劃分前先進行一個評估,若當(dāng)前結(jié)點的劃分不能帶來決策樹泛化性能提升,則停止劃分并將當(dāng)前結(jié)點標記為葉結(jié)點。

    想要評估決策樹算法的泛化性能如何,方法很簡單。可以將訓(xùn)練數(shù)據(jù)集中隨機取出一部分作為驗證數(shù)據(jù)集,然后在用訓(xùn)練數(shù)據(jù)集對每個結(jié)點進行劃分之前用當(dāng)前狀態(tài)的決策樹計算出在驗證數(shù)據(jù)集上的正確率。正確率越高說明決策樹的泛化性能越好,如果在劃分結(jié)點的時候發(fā)現(xiàn)泛化性能有所下降或者沒有提升時,說明應(yīng)該停止劃分,并用投票計數(shù)的方式將當(dāng)前結(jié)點標記成葉子結(jié)點。

    舉個例子,假如上一關(guān)中所提到的用來決定是否買西瓜的決策樹模型已經(jīng)出現(xiàn)過擬合的情況,模型如下:

    假設(shè)當(dāng)模型在劃分是否便宜這個結(jié)點前,模型在驗證數(shù)據(jù)集上的正確率為0.81。但在劃分后,模型在驗證數(shù)據(jù)集上的正確率降為0.67。此時就不應(yīng)該劃分是否便宜這個結(jié)點。所以預(yù)剪枝后的模型如下:

    從上圖可以看出,預(yù)剪枝能夠降低決策樹的復(fù)雜度。這種預(yù)剪枝處理屬于貪心思想,但是貪心有一定的缺陷,就是可能當(dāng)前劃分會降低泛化性能,但在其基礎(chǔ)上進行的后續(xù)劃分卻有可能導(dǎo)致性能顯著提高。所以有可能會導(dǎo)致決策樹出現(xiàn)欠擬合的情況。

    后剪枝

    后剪枝是先從訓(xùn)練集生成一棵完整的決策樹,然后自底向上地對非葉結(jié)點進行考察,若將該結(jié)點對應(yīng)的子樹替換為葉結(jié)點能夠帶來決策樹泛化性能提升,則將該子樹替換為葉結(jié)點。

    后剪枝的思路很直接,對于決策樹中的每一個非葉子結(jié)點的子樹,我們嘗試著把它替換成一個葉子結(jié)點,該葉子結(jié)點的類別我們用子樹所覆蓋訓(xùn)練樣本中存在最多的那個類來代替,這樣就產(chǎn)生了一個簡化決策樹,然后比較這兩個決策樹在測試數(shù)據(jù)集中的表現(xiàn),如果簡化決策樹在驗證數(shù)據(jù)集中的準確率有所提高,那么該子樹就可以替換成葉子結(jié)點。該算法以bottom-up的方式遍歷所有的子樹,直至沒有任何子樹可以替換使得測試數(shù)據(jù)集的表現(xiàn)得以改進時,算法就可以終止。

    從后剪枝的流程可以看出,后剪枝是從全局的角度來看待要不要剪枝,所以造成欠擬合現(xiàn)象的可能性比較小。但由于后剪枝需要先生成完整的決策樹,然后再剪枝,所以后剪枝的訓(xùn)練時間開銷更高。

    編程要求

    填寫fit(self, train_feature, train_label, val_featrue, val_label)函數(shù),實現(xiàn)帶后剪枝的ID3算法,要求決策樹保存在self.tree中。其中:

    • train_feature:訓(xùn)練集數(shù)據(jù),類型為ndarray,數(shù)值全為整數(shù);

    • train_label:訓(xùn)練集標簽,類型為ndarray,數(shù)值全為整數(shù);

    • val_feature:驗證集數(shù)據(jù),類型為ndarray,數(shù)值全為整數(shù);

    • val_label:驗證集標簽,類型為ndarray,數(shù)值全為整數(shù)。

    填寫predict(self, feature)函數(shù),實現(xiàn)預(yù)測功能,并將標簽返回,其中:

    • feature:測試集數(shù)據(jù),類型為ndarray,數(shù)值全為整數(shù)。(PS:feature中有多條數(shù)據(jù))

    測試說明

    只需完成fit與predict函數(shù)即可,程序內(nèi)部會調(diào)用您所完成的fit函數(shù)構(gòu)建模型并調(diào)用predict函數(shù)來對數(shù)據(jù)進行預(yù)測。預(yù)測的準確率高于0.935視為過關(guān)。(PS:若self.tree is None則會打印決策樹構(gòu)建失敗)

    import numpy as np from copy import deepcopyclass DecisionTree(object):def __init__(self):#決策樹模型self.tree = {}def calcInfoGain(self, feature, label, index):'''計算信息增益:param feature:測試用例中字典里的feature,類型為ndarray:param label:測試用例中字典里的label,類型為ndarray:param index:測試用例中字典里的index,即feature部分特征列的索引。該索引指的是feature中第幾個特征,如index:0表示使用第一個特征來計算信息增益。:return:信息增益,類型float'''# 計算熵def calcInfoEntropy(feature, label):'''計算信息熵:param feature:數(shù)據(jù)集中的特征,類型為ndarray:param label:數(shù)據(jù)集中的標簽,類型為ndarray:return:信息熵,類型float'''label_set = set(label)result = 0for l in label_set:count = 0for j in range(len(label)):if label[j] == l:count += 1# 計算標簽在數(shù)據(jù)集中出現(xiàn)的概率p = count / len(label)# 計算熵result -= p * np.log2(p)return result# 計算條件熵def calcHDA(feature, label, index, value):'''計算信息熵:param feature:數(shù)據(jù)集中的特征,類型為ndarray:param label:數(shù)據(jù)集中的標簽,類型為ndarray:param index:需要使用的特征列索引,類型為int:param value:index所表示的特征列中需要考察的特征值,類型為int:return:信息熵,類型float'''count = 0# sub_feature和sub_label表示根據(jù)特征列和特征值分割出的子數(shù)據(jù)集中的特征和標簽sub_feature = []sub_label = []for i in range(len(feature)):if feature[i][index] == value:count += 1sub_feature.append(feature[i])sub_label.append(label[i])pHA = count / len(feature)e = calcInfoEntropy(sub_feature, sub_label)return pHA * ebase_e = calcInfoEntropy(feature, label)f = np.array(feature)# 得到指定特征列的值的集合f_set = set(f[:, index])sum_HDA = 0# 計算條件熵for value in f_set:sum_HDA += calcHDA(feature, label, index, value)# 計算信息增益return base_e - sum_HDA# 獲得信息增益最高的特征def getBestFeature(self, feature, label):max_infogain = 0best_feature = 0for i in range(len(feature[0])):infogain = self.calcInfoGain(feature, label, i)if infogain > max_infogain:max_infogain = infogainbest_feature = ireturn best_feature# 計算驗證集準確率def calc_acc_val(self, the_tree, val_feature, val_label):result = []def classify(tree, feature):if not isinstance(tree, dict):return treet_index, t_value = list(tree.items())[0]f_value = feature[t_index]if isinstance(t_value, dict):classLabel = classify(tree[t_index][f_value], feature)return classLabelelse:return t_valuefor f in val_feature:result.append(classify(the_tree, f))result = np.array(result)return np.mean(result == val_label)def createTree(self, train_feature, train_label):# 樣本里都是同一個label沒必要繼續(xù)分叉了if len(set(train_label)) == 1:return train_label[0]# 樣本中只有一個特征或者所有樣本的特征都一樣的話就看哪個label的票數(shù)高if len(train_feature[0]) == 1 or len(np.unique(train_feature, axis=0)) == 1:vote = {}for l in train_label:if l in vote.keys():vote[l] += 1else:vote[l] = 1max_count = 0vote_label = Nonefor k, v in vote.items():if v > max_count:max_count = vvote_label = kreturn vote_label# 根據(jù)信息增益拿到特征的索引best_feature = self.getBestFeature(train_feature, train_label)tree = {best_feature: {}}f = np.array(train_feature)# 拿到bestfeature的所有特征值f_set = set(f[:, best_feature])# 構(gòu)建對應(yīng)特征值的子樣本集sub_feature, sub_labelfor v in f_set:sub_feature = []sub_label = []for i in range(len(train_feature)):if train_feature[i][best_feature] == v:sub_feature.append(train_feature[i])sub_label.append(train_label[i])# 遞歸構(gòu)建決策樹tree[best_feature][v] = self.createTree(sub_feature, sub_label)return tree# 后剪枝def post_cut(self, val_feature, val_label):# 拿到非葉子節(jié)點的數(shù)量def get_non_leaf_node_count(tree):non_leaf_node_path = []def dfs(tree, path, all_path):for k in tree.keys():if isinstance(tree[k], dict):path.append(k)dfs(tree[k], path, all_path)if len(path) > 0:path.pop()else:all_path.append(path[:])dfs(tree, [], non_leaf_node_path)unique_non_leaf_node = []for path in non_leaf_node_path:isFind = Falsefor p in unique_non_leaf_node:if path == p:isFind = Truebreakif not isFind:unique_non_leaf_node.append(path)return len(unique_non_leaf_node)# 拿到樹中深度最深的從根節(jié)點到非葉子節(jié)點的路徑def get_the_most_deep_path(tree):non_leaf_node_path = []def dfs(tree, path, all_path):for k in tree.keys():if isinstance(tree[k], dict):path.append(k)dfs(tree[k], path, all_path)if len(path) > 0:path.pop()else:all_path.append(path[:])dfs(tree, [], non_leaf_node_path)max_depth = 0result = Nonefor path in non_leaf_node_path:if len(path) > max_depth:max_depth = len(path)result = pathreturn result# 剪枝def set_vote_label(tree, path, label):for i in range(len(path)-1):tree = tree[path[i]]tree[path[len(path)-1]] = vote_labelacc_before_cut = self.calc_acc_val(self.tree, val_feature, val_label)# 遍歷所有非葉子節(jié)點for _ in range(get_non_leaf_node_count(self.tree)):path = get_the_most_deep_path(self.tree)# 備份樹tree = deepcopy(self.tree)step = deepcopy(tree)# 跟著路徑走for k in path:step = step[k]# 葉子節(jié)點中票數(shù)最多的標簽vote_label = sorted(step.items(), key=lambda item: item[1], reverse=True)[0][0]# 在備份的樹上剪枝set_vote_label(tree, path, vote_label)acc_after_cut = self.calc_acc_val(tree, val_feature, val_label)# 驗證集準確率高于0.9才剪枝if acc_after_cut > acc_before_cut:set_vote_label(self.tree, path, vote_label)acc_before_cut = acc_after_cutdef fit(self, train_feature, train_label, val_feature, val_label):''':param train_feature:訓(xùn)練集數(shù)據(jù),類型為ndarray:param train_label:訓(xùn)練集標簽,類型為ndarray:param val_feature:驗證集數(shù)據(jù),類型為ndarray:param val_label:驗證集標簽,類型為ndarray:return: None'''#************* Begin ************#self.tree = self.createTree(train_feature, train_label)# 后剪枝self.post_cut(val_feature, val_label)#************* End **************#def predict(self, feature):''':param feature:測試集數(shù)據(jù),類型為ndarray:return:預(yù)測結(jié)果,如np.array([0, 1, 2, 2, 1, 0])'''#************* Begin ************#result = []# 單個樣本分類def classify(tree, feature):if not isinstance(tree, dict):return treet_index, t_value = list(tree.items())[0]f_value = feature[t_index]if isinstance(t_value, dict):classLabel = classify(tree[t_index][f_value], feature)return classLabelelse:return t_valuefor f in feature:result.append(classify(self.tree, f))return np.array(result)#************* End **************#

    第7關(guān):鳶尾花識別

    • 任務(wù)描述
    • 相關(guān)知識
      • 數(shù)據(jù)簡介
      • DecisionTreeClassifier
    • 編程要求
    • 測試說明

    任務(wù)描述

    本關(guān)任務(wù):使用sklearn完成鳶尾花分類任務(wù)。

    相關(guān)知識

    為了完成本關(guān)任務(wù),你需要掌握如何使用sklearn提供的DecisionTreeClassifier。

    數(shù)據(jù)簡介

    鳶尾花數(shù)據(jù)集是一類多重變量分析的數(shù)據(jù)集。通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預(yù)測鳶尾花卉屬于(Setosa,Versicolour,Virginica)三個種類中的哪一類(其中分別用0,1,2代替)。

    數(shù)據(jù)集中部分數(shù)據(jù)與標簽如下圖所示:

    DecisionTreeClassifier

    DecisionTreeClassifier的構(gòu)造函數(shù)中有兩個常用的參數(shù)可以設(shè)置:

    • criterion:劃分節(jié)點時用到的指標。有g(shù)ini(基尼系數(shù)),entropy(信息增益)。若不設(shè)置,默認為gini
    • max_depth:決策樹的最大深度,如果發(fā)現(xiàn)模型已經(jīng)出現(xiàn)過擬合,可以嘗試將該參數(shù)調(diào)小。若不設(shè)置,默認為None

    和sklearn中其他分類器一樣,DecisionTreeClassifier類中的fit函數(shù)用于訓(xùn)練模型,fit函數(shù)有兩個向量輸入:

    • X:大小為[樣本數(shù)量,特征數(shù)量]的ndarray,存放訓(xùn)練樣本;

    • Y:值為整型,大小為[樣本數(shù)量]的ndarray,存放訓(xùn)練樣本的分類標簽。

    DecisionTreeClassifier類中的predict函數(shù)用于預(yù)測,返回預(yù)測標簽,predict函數(shù)有一個向量輸入:

    • X:大小為[樣本數(shù)量,特征數(shù)量]的ndarray,存放預(yù)測樣本。

    DecisionTreeClassifier的使用代碼如下:

  • from sklearn.tree import DecisionTreeClassifier
  • clf = tree.DecisionTreeClassifier()
  • clf.fit(X_train, Y_train)
  • result = clf.predict(X_test)
  • 編程要求

    補充python代碼,實現(xiàn)鳶尾花數(shù)據(jù)的分類任務(wù),其中訓(xùn)練集數(shù)據(jù)保存在./step7/train_data.csv中,訓(xùn)練集標簽保存在。./step7/train_label.csv中,測試集數(shù)據(jù)保存在。./step7/test_data.csv中。請將對測試集的預(yù)測結(jié)果保存至。./step7/predict.csv中。這些csv文件可以使用pandas讀取與寫入。

    注意:當(dāng)使用pandas讀取完csv文件后,請將讀取到的DataFrame轉(zhuǎn)換成ndarray類型。這樣才能正常的使用fit和predict。

    示例代碼:

  • import pandas as pd
  • # as_matrix()可以將DataFrame轉(zhuǎn)換成ndarray
  • # 此時train_df的類型為ndarray而不是DataFrame
  • train_df = pd.read_csv('train_data.csv').as_matrix()
  • 數(shù)據(jù)文件格式如下圖所示:

    標簽文件格式如下圖所示:

    PS:predict.csv文件的格式必須與標簽文件格式一致。

    測試說明

    只需將結(jié)果保存至./step7/predict.csv即可,程序內(nèi)部會檢測您的代碼,預(yù)測準確率高于0.95視為過關(guān)。


    開始你的任務(wù)吧,祝你成功!

    #********* Begin *********# import pandas as pd from sklearn.tree import DecisionTreeClassifiertrain_df = pd.read_csv('./step7/train_data.csv').as_matrix() train_label = pd.read_csv('./step7/train_label.csv').as_matrix() test_df = pd.read_csv('./step7/test_data.csv').as_matrix()dt = DecisionTreeClassifier() dt.fit(train_df, train_label) result = dt.predict(test_df)result = pd.DataFrame({'target':result}) result.to_csv('./step7/predict.csv', index=False)#********* End *********#

    總結(jié)

    以上是生活随笔為你收集整理的EduCoder 机器学习 决策树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    丁香久久婷婷 | 国产精品自拍在线 | 在线观看岛国 | 欧美午夜性生活 | 久久久精品国产一区二区电影四季 | 精品一区二区三区久久久 | 中文区中文字幕免费看 | av电影在线免费 | 国产手机视频在线 | 三级黄色免费片 | 中文字幕制服丝袜av久久 | 久久一视频 | 久精品在线观看 | 国产丝袜一区二区三区 | 国产精品成人免费精品自在线观看 | 久久久黄色av | 成人一级片免费看 | 久久国精品 | 色综合激情网 | 日本精品va在线观看 | 日韩乱码中文字幕 | 91精品国产高清自在线观看 | 麻豆成人网 | 手机av看片 | 丁香婷婷色 | 色综合久久综合网 | 欧美精品亚洲精品日韩精品 | 久久综合婷婷国产二区高清 | 在线电影av | 中文字幕在线观看资源 | 91色一区二区三区 | 成人免费网站在线观看 | 在线国产精品视频 | 久久婷婷精品视频 | 日韩精品亚洲专区在线观看 | 午夜视频在线观看一区二区三区 | av黄免费看 | 激情视频综合网 | 国产黄色片免费观看 | 天天色播| 国产成本人视频在线观看 | 久久试看 | 国产精品久久久久久久久久新婚 | 国产精品亚州 | 久久久国产精品一区二区中文 | 国产日韩一区在线 | 免费福利视频导航 | 久久国产成人午夜av影院潦草 | 天天插综合 | 国产一区在线免费观看视频 | 99久久日韩精品免费热麻豆美女 | 人人射人人爽 | 91精品国产欧美一区二区 | 狠狠操天天干 | 国产一区免费看 | 中文字幕av电影下载 | 国产高清视频免费观看 | 特级西西444www大精品视频免费看 | 99热精品免费观看 | 成人免费色 | 亚洲国产wwwccc36天堂 | 欧美日韩午夜 | 精品国产一区二区三区久久久久久 | 日韩视频在线不卡 | 国产麻豆电影在线观看 | 国产精品久久久久久久久久东京 | 久久精品欧美一 | 日韩精品你懂的 | 91九色视频在线观看 | 国产中文字幕一区二区三区 | 视频直播国产精品 | 欧美日韩高清在线一区 | 天天综合导航 | 欧美精品色| 精品国产aⅴ一区二区三区 在线直播av | 一区二区精品在线 | 五月天精品视频 | 看片黄网站 | 91成人免费看片 | 亚洲精品乱码久久久久久按摩 | 国产精品久久久久久久免费 | www.天天操.com | 色综合中文字幕 | 国内精品视频一区二区三区八戒 | 97在线看 | 亚洲美女视频在线观看 | 成人免费观看完整版电影 | 男女激情免费网站 | 极品久久久| 精品视频免费久久久看 | 91视频xxxx| 99久久精品久久久久久动态片 | 色婷婷 亚洲 | 又色又爽又黄高潮的免费视频 | 91一区在线观看 | 丁香六月激情 | 久草精品国产 | www.天天成人国产电影 | www.黄色片网站 | 一区二区成人国产精品 | 毛片视频网址 | 久久精品网址 | 国产又粗又猛又爽 | 欧美巨乳波霸 | 成人一区影院 | 在线观看小视频 | 日韩激情在线 | 久久久久激情视频 | 久久久久久国产精品亚洲78 | 日韩爱爱网站 | 中文字幕高清免费日韩视频在线 | 成人在线一区二区三区 | 在线观看国产www | 婷婷狠狠操 | 国产伦精品一区二区三区高清 | 国产999精品| 久久麻豆精品 | 91亚洲精品国偷拍自产在线观看 | 国产精品18久久久久vr手机版特色 | 久久成人一区二区 | 在线观看 国产 | aa级黄色大片 | 久久久久国产视频 | 欧美一二区视频 | 精品国产免费看 | 免费三级骚| 五月婷婷开心中文字幕 | 精品国产三级 | 国产在线不卡精品 | 国产中文字幕在线播放 | 一级久久久 | 狠狠色伊人亚洲综合网站野外 | 国产呻吟在线 | 丁香婷婷久久久综合精品国产 | 国产小视频免费在线网址 | 在线你懂的视频 | 国内精品久久久久久久影视简单 | 午夜精品久久 | 中文字幕人成人 | 欧美国产高清 | 日韩欧美精品在线观看 | 国产婷婷久久 | 色综合天天狠狠 | 日韩午夜精品福利 | 国产97碰免费视频 | 97超级碰碰碰视频在线观看 | 四虎在线免费观看 | 精品产品国产在线不卡 | av不卡在线看 | 国产精品乱码久久久久久1区2区 | 国产小视频免费在线网址 | 国产在线精品区 | 久久精品99国产精品亚洲最刺激 | 人人插人人草 | 日日夜夜91 | 日韩av午夜 | 有没有在线观看av | 欧女人精69xxxxxx | 96av在线| 人人插人人 | 91伊人| 中文字幕一区二区三区四区 | 在线中文字幕一区二区 | 精品视频中文字幕 | 日韩欧三级 | 黄色av免费电影 | 日韩av免费一区 | 久久久精品国产一区二区三区 | 天堂av观看 | 丁香婷婷激情 | 久久精品三 | 一区二区三区视频在线 | 日本护士三级少妇三级999 | 日韩精品一区在线播放 | 中文国产成人精品久久一 | 一区二区三区免费看 | 国产黄在线播放 | 欧美日本高清视频 | 国产一区二区久久久 | 黄色av电影 | 国产视频一区二区在线观看 | 国产亚洲精品v | 91av在线不卡 | 亚洲精品久久久久久久不卡四虎 | 日韩欧美综合在线视频 | 日日操狠狠干 | 麻豆视频在线免费 | 国产伦理一区二区三区 | 亚洲第五色综合网 | 在线观看一区 | 人人爽人人舔 | 五月婷婷丁香六月 | 久久国产午夜精品理论片最新版本 | 就操操久久 | 国产一区二区电影在线观看 | 午夜视频在线观看一区二区 | 五月婷婷久草 | www.狠狠干 | 99自拍视频在线观看 | 99九九99九九九视频精品 | 精品国产精品久久 | 精品欧美一区二区在线观看 | 国内视频一区二区 | 国产精品美女久久久久久 | 91成人免费电影 | 免费观看丰满少妇做爰 | 日韩免费看| 天天操夜夜操国产精品 | 日韩国产精品一区 | 中文资源在线官网 | 国产高清精品在线观看 | 日韩中文在线观看 | 天天综合网天天综合色 | 久草新在线 | 国产一二区在线观看 | 欧美一二三区播放 | 91pony九色丨交换 | 精品国偷自产在线 | 99久高清在线观看视频99精品热在线观看视频 | 美女福利视频 | 亚洲精品美女视频 | 久久精品久久久精品美女 | 综合激情网... | 超碰av在线| 色先锋av资源中文字幕 | 国产精品高潮呻吟久久久久 | 中文字幕在线影院 | 狠狠色狠狠色综合日日小说 | 香蕉视频日本 | 色多多污污在线观看 | 国产精品正在播放 | 免费日韩一区 | 国产午夜免费视频 | 久久高清国产视频 | av3级在线| 亚洲日本va中文字幕 | 久久综合免费视频影院 | 成人禁用看黄a在线 | 免费三级黄色片 | 99精品欧美一区二区蜜桃免费 | 在线视频日韩精品 | av九九九 | 怡红院av| 亚洲色图27p| 日本h在线播放 | 国产尤物一区二区三区 | 97精品免费视频 | 97精品久久人人爽人人爽 | 国产原创在线视频 | 1024手机在线看 | 欧美另类69 | 五月婷婷综合久久 | 国产亚洲视频在线免费观看 | 99久久精品日本一区二区免费 | 玖草影院 | 久久综合九色99 | 日韩毛片在线一区二区毛片 | 亚洲国产日韩在线 | 日韩中文字幕免费电影 | 免费中文字幕 | 国产亚洲精品女人久久久久久 | 日韩大片免费观看 | 亚洲视频资源在线 | 97碰视频| 色婷婷激情四射 | 99在线精品观看 | 日韩中文字幕国产精品 | 五月综合色 | 国际av在线 | 成人动漫视频在线 | 91九色蝌蚪国产 | 免费大片av | 国内精品久久久久 | 久久人人爽人人 | 日本在线观看中文字幕无线观看 | 精品国产免费一区二区三区五区 | 九九有精品 | 亚洲国产精品视频在线观看 | 亚洲伊人第一页 | 超碰成人免费电影 | 91麻豆网| 欧美日韩免费观看一区二区三区 | 国产精品久久久久久高潮 | 91黄站| www.亚洲激情.com| 91看片淫黄大片91 | av片免费播放 | 五月亚洲综合 | a色视频 | 超碰在线免费福利 | 正在播放 国产精品 | 四虎最新入口 | 西西www444 | 亚洲精品视频免费 | 丁香五月亚洲综合在线 | 精品在线观 | 国产精品va在线播放 | 在线观看黄色大片 | 欧美成年网站 | 91精品999 | 国内免费久久久久久久久久久 | 五月婷婷激情 | 国产精品一区二区三区四 | 久久网站免费 | 久久久91精品国产 | 久久免费电影网 | 亚洲精品国偷拍自产在线观看蜜桃 | 黄色国产高清 | 国产亚洲精品福利 | 日韩精品视频在线免费观看 | 天天操天天射天天操 | 色婷婷成人网 | 欧美孕妇与黑人孕交 | 中文在线www| 成人免费视频在线观看 | 午夜av色 | 久久综合九色欧美综合狠狠 | 欧美日韩二三区 | 国产手机av| 天天插日日射 | 国产女人40精品一区毛片视频 | 久草在线资源观看 | 国产精品资源网 | 国产69精品久久99不卡的观看体验 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 午夜丁香网| 麻豆视频免费入口 | 欧美精品乱码久久久久久按摩 | 国产视频资源在线观看 | 色婷婷激情四射 | 久久激情视频 久久 | 久久精品永久免费 | 色综合天天做天天爱 | 欧美一区二区三区不卡 | 日韩欧美视频免费在线观看 | 黄色毛片视频免费观看中文 | 国产成人一区三区 | 91伊人久久大香线蕉蜜芽人口 | 高清精品视频 | 在线之家免费在线观看电影 | 99久久精品免费看国产一区二区三区 | 久久精品一二三区白丝高潮 | 免费视频成人 | 久久手机免费视频 | 久久国产经典 | 国产日韩欧美视频 | 日日夜夜操操 | 99精品国产一区二区三区不卡 | 国产精品一区二区免费在线观看 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 亚洲精品xxx | 在线观看视频黄 | 中文字幕黄色 | 久久精品欧美一区 | 九九九视频精品 | 日韩精品视频久久 | 九九热国产视频 | 成人黄色电影在线 | 日韩中文字幕亚洲一区二区va在线 | 在线免费观看羞羞视频 | 综合久久精品 | 九九电影在线 | 蜜臀av免费一区二区三区 | 6699私人影院 | 日韩色视频在线观看 | 国产91精品一区二区麻豆亚洲 | 丁香激情五月婷婷 | 国产综合在线观看视频 | 欧美精品久久天天躁 | 国产在线a免费观看 | 国产在线观看你懂得 | 九九在线视频 | 色吊丝在线永久观看最新版本 | 成人午夜电影网 | 久久久久综合 | 激情在线网址 | av成人在线播放 | 久久免费精彩视频 | 国产精品亚洲a | www.国产在线观看 | 久久久视频在线 | 91av在| 91av网址| 久久久国产网站 | www.久久91| 视频二区在线 | 97人人人| av黄色在线观看 | 中文字幕在线观看视频一区二区三区 | 国产精品毛片久久久久久 | 久久99精品波多结衣一区 | 久久久国产精品人人片99精片欧美一 | 免费又黄又爽 | 国产成人av在线影院 | 久久综合婷婷国产二区高清 | 99久久婷婷国产精品综合 | 丁香六月网 | 久久久麻豆精品一区二区 | 久久久久99999 | 特级西西444www大精品视频免费看 | 黄a在线| 久久国产精品一区二区 | 免费毛片一区二区三区久久久 | 久久精品一级片 | 日韩在线首页 | 久久y | 日韩欧美xx| 婷婷播播网| 色在线视频网 | 国产精品美女免费看 | 成人黄色电影在线 | 国产日韩一区在线 | 黄色国产精品 | 久久美女精品 | 精品美女国产在线 | 国产高清在线免费 | 国产亚洲成av人片在线观看桃 | 久久亚洲视频 | 亚洲一级免费电影 | 狠狠黄 | 日韩av一卡二卡三卡 | 日韩在线第一区 | 欧美一区二区三区免费观看 | 奇米网网址 | 午夜男人影院 | 黄色毛片在线看 | 精品一区电影国产 | 欧美日韩二区三区 | 中文av免费 | 蜜臀av在线一区二区三区 | 久久草在线视频国产 | 99r在线播放 | 麻豆免费在线播放 | 久久不射网站 | 97天堂| 国产亚洲日本 | 精品国产亚洲日本 | 色婷婷综合成人av | 日韩18p| 激情亚洲综合在线 | 中文字幕成人一区 | 鲁一鲁影院 | 亚洲精品黄色片 | 色偷偷888欧美精品久久久 | 久久久免费视频播放 | 色婷婷综合视频在线观看 | 日本黄色大片免费看 | 六月丁香伊人 | 99热免费在线 | 免费看国产曰批40分钟 | 亚洲精品99久久久久久 | 国模一区二区三区四区 | 国产精品免费看 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产精品av电影 | 午夜天使 | 日本爱爱免费 | 久草a视频| 99精品热视频 | 在线观看中文字幕dvd播放 | 久久国际影院 | av网站有哪些 | 国产96视频| 97超碰在线久草超碰在线观看 | 中文字幕色综合网 | 97精品伊人 | 国产人成在线观看 | 在线观看久久久久久 | av高清在线观看 | av综合av | 日本成人中文字幕在线观看 | 91av在线免费视频 | 亚洲1区 在线 | 国产一区在线精品 | 国产精品不卡在线播放 | 亚洲一区网 | 久久不见久久见免费影院 | 亚洲综合在线五月 | 久久免费视频在线观看30 | 手机av在线网站 | 成 人 黄 色 免费播放 | 国产999精品久久久久久绿帽 | 日韩一区二区三区高清免费看看 | 国产黄色高清 | 免费日韩精品 | 久草观看视频 | 日韩在线观看视频一区二区三区 | 成人h动漫精品一区二 | 成人91在线| 国产乱对白刺激视频在线观看女王 | 国产精品九九视频 | 在线看v片成人 | www久久久久 | 精品久久久久国产免费第一页 | 久久伦理网 | 国产精品久久久久久一二三四五 | 日日草视频 | 99精品视频精品精品视频 | 午夜a区| 欧美a级免费视频 | 国产一级做a爱片久久毛片a | 国产精品区一区 | 亚洲午夜久久久久久久久电影网 | 婷婷久操 | 国产福利一区二区三区视频 | 最新国产精品久久精品 | 婷婷综合成人 | 成人app在线播放 | 色噜噜狠狠狠狠色综合 | 欧美日本不卡 | 福利一区二区三区四区 | 九九免费视频 | 日韩欧美电影 | 丁香婷婷久久久综合精品国产 | 亚州天堂 | 国产二区视频在线 | 久久久五月婷婷 | 国产日韩欧美在线播放 | 天堂av在线7 | 欧美激情第十页 | 国产一级片在线播放 | 黄污在线观看 | 波多野结衣视频一区 | 激情综合啪啪 | 综合久色 | 亚洲三级毛片 | 天堂av一区二区 | 国产福利在线免费观看 | 99国内精品久久久久久久 | 精品亚洲免费视频 | 五月综合久久 | 日本高清中文字幕有码在线 | 91国内产香蕉 | 久久久久亚洲精品成人网小说 | 天堂av在线网站 | a天堂免费 | 成人欧美一区二区三区黑人麻豆 | 极品嫩模被强到高潮呻吟91 | 午夜精品视频免费在线观看 | 精品久久久久久久久久久久久久久久 | 综合精品久久 | 日韩欧美视频二区 | 色99导航 | 国产v亚洲v | 在线观看视频一区二区三区 | 97成人精品视频在线播放 | 99久久精品国产一区二区三区 | 精品在线你懂的 | 夜夜操天天| 天天干天天草天天爽 | 欧美一级免费高清 | 欧美精品在线视频 | 久久综合影音 | 日韩欧美不卡 | 韩国精品福利一区二区三区 | 久久久久久久影视 | 成人动漫精品一区二区 | 国产精品18p| 免费观看视频的网站 | 91 中文字幕| 中文区中文字幕免费看 | 欧美一区日韩精品 | 日韩av成人在线观看 | 日本最新中文字幕 | 粉嫩av一区二区三区免费 | 亚洲h色精品 | 黄色1级毛片 | 国产高清视频在线免费观看 | 亚洲国产网站 | 最近日本中文字幕 | 色综合久久久久综合99 | 国产精品久久久久影院 | 国产成人久久精品77777 | 日韩丝袜 | 亚洲 欧美 日韩 综合 | 亚洲精品97| 69av国产 | 91精品对白一区国产伦 | 在线观看国产一区 | 欧美日韩国产一区 | 天天爱天天 | 狠狠五月天 | 99久久婷婷国产综合精品 | 久久久久国产精品免费免费搜索 | 在线观看成年人 | 久草亚洲视频 | 色老板在线视频 | 福利二区视频 | 久久亚洲精品国产亚洲老地址 | 久久久久久久久久久久久久电影 | 超碰97人人在线 | 伊人色**天天综合婷婷 | 免费看黄在线看 | 国产亚洲日 | 日韩av电影网站在线观看 | 久草在线最新 | 91精品导航 | 日本三级不卡 | 国产精品ssss在线亚洲 | 亚洲国内精品视频 | 亚洲成人动漫在线观看 | 欧美一区二区日韩一区二区 | 久久精品毛片 | 手机av永久免费 | 国产精品免费久久久久影院仙踪林 | 国产又粗又长又硬免费视频 | 久久久色 | 国产精品一级视频 | 婷婷 中文字幕 | 一本一本久久a久久精品综合 | a视频在线观看 | 麻豆国产视频下载 | 99精品国产免费久久久久久下载 | 欧美在线观看视频免费 | 一区二区三区中文字幕在线观看 | 一级黄色大片在线观看 | 欧美精品午夜 | 亚洲黄网站 | av在线在线 | 国产一二区视频 | 五月天久久婷 | 91丨九色丨首页 | 久久久鲁 | 久久av中文字幕片 | 亚洲视屏在线播放 | 色偷偷88欧美精品久久久 | 99精品久久久久久久 | 欧美黄色免费 | 成人啪啪18免费游戏链接 | 中文字幕字幕中文 | 亚洲免费资源 | 亚洲精品免费在线观看 | 丁香 久久 综合 | 色久综合| 色播六月天| 国产精品免费麻豆入口 | 激情影音先锋 | 午夜三级福利 | 亚洲一级免费观看 | 久久99久久久久 | 亚洲欧美视频一区二区三区 | 国产最新在线观看 | 久一在线 | 91人人爽久久涩噜噜噜 | 欧洲一区精品 | 毛片美女网站 | 免费成人在线电影 | 男女视频久久久 | 国产福利在线免费观看 | 成人欧美一区二区三区在线观看 | 久草免费在线观看 | 99在线看 | 中文字幕在线免费 | 欧美日韩国产一二三区 | 久久久91精品国产一区二区三区 | 六月丁香激情综合 | 国产精品久久久av | 国产成人三级在线播放 | 日韩精品一区二区免费视频 | 九九久| 97在线播放 | av网址aaa | 精品国产伦一区二区三区 | 国产69精品久久久久久久久久 | 一区二区在线影院 | 欧美精品一区二区三区四区在线 | 欧美另类调教 | 视频在线日韩 | 久久av高清 | 丰满少妇一级 | 亚洲国产三级在线 | 69国产精品成人在线播放 | 欧美视屏一区二区 | 婷婷色狠狠 | 五月综合在线观看 | 久久综合九色综合久久久精品综合 | 欧美另类交在线观看 | 欧美在线久久 | 国产一区免费在线观看 | 日日碰狠狠躁久久躁综合网 | 一区二区三区电影在线播 | 国产精品激情在线观看 | 精品国产亚洲一区二区麻豆 | av一区二区三区在线播放 | 在线观看成人小视频 | 91久久精品日日躁夜夜躁国产 | 亚洲一级电影在线观看 | 国产视频在线一区二区 | 91成人网页版 | 欧美日韩视频 | 色视频在线 | 91视频亚洲 | 综合网色 | 999电影免费在线观看 | 在线观看中文字幕第一页 | 91在线免费播放 | 精品国产一区二区三区免费 | 久久精品国产亚洲aⅴ | 国产日韩欧美网站 | 亚洲人成人天堂h久久 | 人人插人人做 | 久久在线免费观看 | 91香蕉视频在线 | 91香蕉视频| 99久久久国产精品免费观看 | 又大又硬又黄又爽视频在线观看 | 黄色视屏在线免费观看 | 日日干夜夜操视频 | 99精品久久99久久久久 | 亚洲最大在线视频 | 久久在线播放 | 国产精品第二页 | 国产精品美女久久久久aⅴ 干干夜夜 | 韩日三级av| 天天干天天综合 | 在线观看国产亚洲 | 99久久久久久久 | 久草视频在 | 久久神马影院 | 六月婷色| 日韩精品大片 | 亚洲成a人片综合在线 | 国产精品久久久久一区二区三区 | 天天曰| 日韩欧美精选 | 国产精品专区h在线观看 | 中文字幕在线免费97 | 欧美日韩中文字幕在线视频 | 美女久久久久久久久久久 | 黄视频色网站 | 成年人看片 | 成人免费视频a | 日韩在线色 | 人人狠狠综合久久亚洲婷 | 日韩免费一级a毛片在线播放一级 | 91视频在线免费下载 | 激情六月婷婷久久 | 四虎免费在线观看视频 | 色婷婷久久一区二区 | 久久久国产一区二区三区四区小说 | 最新国产在线 | 九九热精 | 人人草在线视频 | 99精品视频一区二区 | 日韩在线观看影院 | 日韩精品一区二区三区丰满 | 亚州精品天堂中文字幕 | 亚洲黄a| 成人国产在线 | 91日韩免费 | 国产在线观看免费 | 999久久久久| 97在线视 | 国产在线视频资源 | 亚洲激情电影在线 | 国内少妇自拍视频一区 | 日韩中字在线观看 | av电影免费观看 | 国产精品高潮呻吟久久av无 | 久草免费在线视频 | 蜜臀aⅴ国产精品久久久国产 | 色网址99| 91黄色视屏 | 国产h在线播放 | 国产视频一区在线 | 天天操操 | av在线免费观看黄 | 手机成人在线电影 | 99亚洲视频 | 日韩在线网址 | 新版资源中文在线观看 | 五月婷婷丁香网 | 久久久av电影 | 国产精品你懂的在线观看 | 国产福利免费在线观看 | 97人人射 | 日韩在线视频免费观看 | 狠狠狠综合 | 欧美日韩高清在线 | 少妇bbb搡bbbb搡bbbb | 99色资源 | 亚洲日本韩国一区二区 | 夜夜爽天天爽 | av在观看 | 国产人成在线视频 | 香蕉看片| 男女激情麻豆 | 热九九精品 | 碰超在线观看 | 亚洲资源在线观看 | 亚洲春色成人 | 婷婷丁香狠狠爱 | 91精品综合| 精品视频免费观看 | 日韩黄色在线电影 | 91最新在线观看 | 欧美性大战久久久久 | 久草a在线 | 国产伦理久久精品久久久久_ | 国产高清视频在线播放一区 | 欧美一区二区三区免费观看 | 国产一级在线免费观看 | 日韩激情网| 国产亲近乱来精品 | 久久精品96| 亚洲成人av电影在线 | 超碰精品在线观看 | 福利视频第一页 | 视频在线99 | 久久久久久久久久久免费 | 99色资源| 精品久久久久久亚洲综合网站 | 美女av电影 | 国产日韩精品一区二区三区 | 在线视频中文字幕一区 | 成人在线观看免费 | 欧美成人在线免费 | 日本xxxxav| 96香蕉视频 | 国产精品成人在线观看 | 黄色一及电影 | 精品女同一区二区三区在线观看 | 四虎8848免费高清在线观看 | 国产日韩精品在线观看 | 香蕉视频国产在线 | 综合精品久久 | 国产综合91 | 91豆麻精品91久久久久久 | 韩国在线视频一区 | 免费日韩电影 | 在线观看黄av| 欧美一级特黄aaaaaa大片在线观看 | 国产精品久久久久久久午夜 | 99国产视频在线 | www五月婷婷 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 在线观看色网站 | 国产一二三精品 | 国产一区国产精品 | 三级a视频 | 8x成人在线 | 92精品国产成人观看免费 | 国产精品久久久久久久久毛片 | 国产91电影在线观看 | 久久免费黄色大片 | 欧美激情第八页 | 久草影视在线观看 | 精品99久久| 久草在线免费新视频 | 中国精品一区二区 | 国产成人精品亚洲a | 国产成人精品一区二区三区 | 中文字幕在线有码 | 黄色av在 | 一区二区三区在线免费观看视频 | 天天色天天操天天爽 | av在线播放一区二区三区 | 日韩久久精品一区二区 | 国产黄色片免费 | 中文字幕免费高清在线观看 | 欧美性免费 | 亚洲精品一区二区三区四区高清 | 在线观看视频97 | 国产不卡精品 | 麻豆免费观看视频 | 综合色伊人 | 悠悠av资源片| 国产黑丝一区二区 | 久久99热久久99精品 | 国产精品视频全国免费观看 | 黄色网址国产 | 99精品免费| 国产精品99精品久久免费 | 亚洲六月丁香色婷婷综合久久 | 免费看一及片 | 99久久精品午夜一区二区小说 | 免费在线观看av网站 | 国产精品久久久久久久久免费看 | 视频一区二区国产 | 色综合久久88色综合天天免费 | 五月婷婷激情六月 | 精品一区二区免费 | 国产日本亚洲高清 | 992tv人人草| 国产一区二区免费看 | 成人免费大片黄在线播放 | 国产精品99久久久久久人免费 | 四虎视频 | 国产精品久久久久一区二区三区 | 日本精品久久久久中文字幕5 | 深夜国产福利 | 久久久免费观看完整版 | 在线观看国产91 | 在线观看av免费 | 国产视频2| 波多野结衣网址 | 久久99网站| 国偷自产视频一区二区久 | 亚洲精品久久久久www | 偷拍精偷拍精品欧洲亚洲网站 | 日本一区二区三区免费看 | 国产一区二区三区免费在线观看 | 草莓视频在线观看免费观看 | 午夜精品一二三区 | 一区二区三区精品久久久 | 久草在线在线 | 一区二区三区四区精品视频 | 久久成人毛片 | 青青草国产成人99久久 | 亚洲精品tv久久久久久久久久 | 99久久久成人国产精品 | 97人人爽 | 成人a免费 | 久久久精品欧美 | 婷婷久久亚洲 | 中文字幕一区二区在线播放 | 欧美精品亚洲精品 | 视频三区 | 久久精品日产第一区二区三区乱码 | 少妇bbbb搡bbbb桶 | 国产精品久久久久影院 | 国产高h视频| 激情久久影院 | 色婷婷国产| 日韩精品一区二区在线视频 | 九九视频在线播放 | 精品一区91 | 成人久久久电影 | 国产福利一区二区三区在线观看 | 狠狠色综合网站久久久久久久 | 在线成人免费 | 日本韩国精品在线 | 91av视频播放 | 中文字幕色婷婷在线视频 | 特级毛片在线 | 中文字幕亚洲精品在线观看 | 亚洲性少妇性猛交wwww乱大交 | 天堂网一区二区三区 | 亚洲天堂免费视频 | 亚洲国产精品久久久久 | 国产精品久久久视频 | 97在线观看免费观看高清 | 亚洲国产精品电影 | 亚洲成人网av | 黄色国产在线观看 | 天天操夜夜干 | 五月天,com| 国产精品久久久久久久久久99 | 成人黄色电影在线 | 亚洲国产一区av | 久久久久欧美精品999 | 免费网站黄 | 亚洲午夜久久久久久久久 | 中文字幕av免费观看 | 啪啪免费试看 | 国外成人在线视频网站 | 国产精品欧美久久 | 欧美精品中文字幕亚洲专区 | 深夜免费福利视频 | 久久综合久久久 | 五月综合婷| 久热久草在线 | 国产一区在线看 | 久久久久亚洲精品国产 | 天天天插| 中文日韩在线视频 | 国产亚洲精品中文字幕 | 久久久影院一区二区三区 | 日韩av影片在线观看 | 久久精品毛片基地 | 操操操夜夜操 | 国产精品6 | 不卡中文字幕av | 国内揄拍国内精品 | 国产精品久久久免费 | 久草资源在线 | 国产亚洲精品久久久久久久久久 | 色综合久久久 | 免费看的黄色小视频 | 久久免费的精品国产v∧ | 国产一区二区在线精品 | 天天草夜夜 | 午夜资源站 | 91精品欧美| 久久好看免费视频 | 69国产精品视频免费观看 | 日韩aa视频 | 日韩爱爱片| 欧美精选一区二区三区 | 人人精久 | 国产99久久久久久免费看 | 西西444www大胆高清图片 | 婷婷网站天天婷婷网站 | 欧美日韩国产欧美 | 国产18精品乱码免费看 | 97超级碰碰碰碰久久久久 | 久草视频视频在线播放 | 婷婷在线资源 |