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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

决策树—ID3(源码解析)

發布時間:2024/9/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 决策树—ID3(源码解析) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

理論方面機器學習實戰中講的非常清楚,深入點的話在西瓜書可以參考,這里只把源碼貼出來和學習中的一些困難。

這里主要主要是有這么幾塊:

  • 首先搞懂信息熵和其作用

  • 劃分數據集

  • 遞歸構建決策樹

  • Matplotlib注解繪制樹形圖

  • 測試和存儲分類器

  • 示例:使用決策樹預測隱形眼鏡類型

構建一個決策樹:

from math import log import operator #import pickle #import tree_plot# 自己建立的數據 def createDataSet():# 各元素也是列表dataSet = [[1, 1, 'yes'],[1, 1, 'yes'],[1, 0, 'no'],[0, 1, 'no'],[0, 1, 'no']]labels = ['no surfacing','flippers'] # 特征標簽return dataSet, labels# 計算給定數據集的香農熵 def calcShannonEnt(dataSet):# 數據集中實例的總數numEntries = len(dataSet)# 頻數統計labelCounts = {}for featVec in dataSet: currentLabel = featVec[-1] # 最后一列作為標簽if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0labelCounts[currentLabel] += 1 # 統計不同的標簽數#print labelCountsshannonEnt = 0.0# 計算香農熵for key in labelCounts:prob = float(labelCounts[key])/numEntriesshannonEnt -= prob * log(prob,2) # 以2為底return shannonEnt# 按照給定特征劃分數據集,返回剩余特征 # 三個參數:待劃分的數據集,劃分的特征,需返回的特征的值 def splitDataSet(dataSet, axis, value): # 創建新的列表,避免影響原數據retDataSet = []for featVec in dataSet:if featVec[axis] == value: # 提取特定特征中的特定值reducedFeatVec = featVec[:axis] # 得到axis列之前列的特征# 在處理多個列表時,append()是添加的列表元素,而extend()添加的是元素reducedFeatVec.extend(featVec[axis+1:]) # 得到axis列之后列的特征retDataSet.append(reducedFeatVec)return retDataSet # 返回指定劃分特征外的特征# 選擇最好的數據集劃分方式,根據熵計算 def chooseBestFeatureToSplit(dataSet):numFeatures = len(dataSet[0]) - 1 # 留出來一列,把最后一列作為類別標簽baseEntropy = calcShannonEnt(dataSet) # 計算原始香濃熵,劃分前bestInfoGain = 0.0; bestFeature = -1 # 賦初值for i in range(numFeatures): # 迭代所有的特征# 使用列表推導來創建新的列表,featlist得到的是每列的特征元素featList = [example[i] for example in dataSet]print 'featList:',featListuniqueVals = set(featList) # 轉換為集合,以此確保其中的元素的唯一性print 'uniqueVals:',uniqueValsnewEntropy = 0.0 for value in uniqueVals:# 每一列按照不重復的元素劃分,返回剩余特征subDataSet = splitDataSet(dataSet, i, value) print 'subDataSet:',subDataSetprob = len(subDataSet)/float(len(dataSet)) # 頻率# 得到此次劃分的熵,此處的prob和calcShannonEnt()中的prob不是同一種,第一個# 是實例數在整體數組的頻率,第二個是部分數組中的標簽頻率,newEntropy求的是信息期望newEntropy += prob * calcShannonEnt(subDataSet) infoGain = baseEntropy - newEntropy # 計算信息增益,即熵的減少print 'infogain:',infoGainif (infoGain > bestInfoGain): #如果信息量減少,就把減少量作為基準bestInfoGain = infoGain bestFeature = i return bestFeature # 返回信息信息增益最高的特征列# 多數表決法決定葉節點分類 def majorityCnt(classList): # classList是分類名稱的列表classCount={} # 存儲每個類標簽出現的頻率for vote in classList:# 統計所有的不重復的keyif vote not in classCount.keys(): classCount[vote] = 0classCount[vote] += 1# 對分類進行倒序排列sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1),\reverse=True)# 返回出現次數最多的名稱return sortedClassCount[0][0]# 創建樹的函數代碼 def createTree(dataSet,labels): # labels存儲的是特征標簽classList = [example[-1] for example in dataSet] # 數據集的最后一列作為類標簽列表print 'classList:',classList# 判斷類別是否完全相同,通過查看類標簽的第一個的數目if classList.count(classList[0]) == len(classList): return classList[0]# 判斷是否遍歷完所有的特征,通過查看剩下的特征數是不是剩下一個if len(dataSet[0]) == 1: return majorityCnt(classList)bestFeat = chooseBestFeatureToSplit(dataSet) # 找到當前數據集最好的特征的索引bestFeatLabel = labels[bestFeat]myTree = {bestFeatLabel:{}} # 嵌套字典,得到一個當前最好的特征標簽del(labels[bestFeat]) # 刪除當前最好的特征標簽。即劃分時類別特征數目減少# 列表推到式得到數據集的最好特征標簽的那列featValues = [example[bestFeat] for example in dataSet] uniqueVals = set(featValues) # 集合確保元素的唯一性for value in uniqueVals:subLabels = labels[:] # 得到當前剩余的特征標簽 # 遞歸調用myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet,\bestFeat, value),subLabels)return myTree # 創建自己的數據集 mydat,labels=createDataSet() # mydat,lables相當于全局變量 print calcShannonEnt(mydat) mydat[0][-1]='maybe' print calcShannonEnt(mydat)print(splitDataSet(mydat,1,1)) print(splitDataSet(mydat,0,1)) print('bestFeature:',chooseBestFeatureToSplit(mydat)) print '.............................' print(createTree(mydat,labels))

看運行的結果:

0.970950594455 1.37095059445 [[1, 'maybe'], [1, 'yes'], [0, 'no'], [0, 'no']] [[1, 'maybe'], [1, 'yes'], [0, 'no']] featList: [1, 1, 1, 0, 0] uniqueVals: set([0, 1]) subDataSet: [[1, 'no'], [1, 'no']] subDataSet: [[1, 'maybe'], [1, 'yes'], [0, 'no']] infogain: 0.419973094022 featList: [1, 1, 0, 1, 1] uniqueVals: set([0, 1]) subDataSet: [[1, 'no']] subDataSet: [[1, 'maybe'], [1, 'yes'], [0, 'no'], [0, 'no']] infogain: 0.170950594455 ('bestFeature:', 0) ............................. classList: ['maybe', 'yes', 'no', 'no', 'no'] featList: [1, 1, 1, 0, 0] uniqueVals: set([0, 1]) subDataSet: [[1, 'no'], [1, 'no']] subDataSet: [[1, 'maybe'], [1, 'yes'], [0, 'no']] infogain: 0.419973094022 featList: [1, 1, 0, 1, 1] uniqueVals: set([0, 1]) subDataSet: [[1, 'no']] subDataSet: [[1, 'maybe'], [1, 'yes'], [0, 'no'], [0, 'no']] infogain: 0.170950594455 classList: ['no', 'no'] classList: ['maybe', 'yes', 'no'] featList: [1, 1, 0] uniqueVals: set([0, 1]) subDataSet: [['no']] subDataSet: [['maybe'], ['yes']] infogain: 0.918295834054 classList: ['no'] classList: ['maybe', 'yes'] {'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'maybe'}}}}

上述結果顯示了算法運行的具體過程,最后一行得到了決策樹的數據結構,用的是python的字典來存儲的,可以看出是一種層級關系。

在函數createTree(dataSet,labels)中:

myTree = {bestFeatLabel:{}} # 嵌套字典,得到一個當前最好的特征標簽 # 遞歸調用myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet,\bestFeat, value),subLabels)

這兩行我起初覺得myTree字典被重置,其實是遞歸的作用,我的理解是這樣的
字典遞歸

還有就是遞歸終止條件的判斷要注意。。

使用Matplotlib繪制樹形圖:

可能會用到的函數:
matplotlib(1)
matplotlib(2)
matplotlib(3)

# -*- coding: utf-8 -*- """ 繪制樹節點 Created on Thu Aug 10 10:37:02 2017 @author: LiLong """ #import decision_tree.py import matplotlib.pyplot as plt# boxstyle為文本框的類型,sawtooth是鋸齒形,fc是邊框線粗細 decisionNode = dict(boxstyle="sawtooth", fc="0.8") leafNode = dict(boxstyle="round4", fc="0.8") # 定義決策樹的葉子結點的描述屬性 arrow_args = dict(arrowstyle="<-") # 定義箭頭屬性,也可以是<->,效果就變成雙箭頭的了# 繪制結點文本和指向 def plotNode(nodeTxt, centerPt, parentPt, nodeType):#nodeTxt為要顯示的文本,xytext是文本的坐標,#xy是注釋點的坐標 ,nodeType是注釋邊框的屬性,arrowprops連接線的屬性createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords='axes fraction',xytext=centerPt, textcoords='axes fraction',va="center", ha="center", bbox=nodeType, arrowprops=arrow_args)# 獲取葉節點的數目 def getNumLeafs(myTree):numLeafs = 0firstStr = myTree.keys()[0] # 得到第一個鍵 secondDict = myTree[firstStr] # 得到第一個鍵對應的值 for key in secondDict.keys(): # 測試節點的數據類型是否是字典if type(secondDict[key]).__name__=='dict':numLeafs += getNumLeafs(secondDict[key]) # 又是遞歸調用else: numLeafs +=1return numLeafs # 返回葉節點數# 獲取樹的層數(遞歸在此就像是一層一層的剝到最里面,然后再從里到外加起來) def getTreeDepth(myTree):maxDepth = 0firstStr = myTree.keys()[0]secondDict = myTree[firstStr] for key in secondDict.keys(): #keys()函數得到的是key,是一個列表#print'key:',key# 測試節點的數據類型是否是字典,如果是字典說明是可以再分的,深度+1if type(secondDict[key]).__name__=='dict':thisDepth = 1 + getTreeDepth(secondDict[key]) # 遞歸調用,層層剝離字典else: thisDepth = 1if thisDepth > maxDepth: maxDepth = thisDepthreturn maxDepth# 繪制中間文本的坐標和顯示內容,即父子之間的填充文本 def plotMidText(cntrPt, parentPt, txtString):xMid = (parentPt[0]-cntrPt[0])/2.0 + cntrPt[0] # 求中間點的橫坐標 yMid = (parentPt[1]-cntrPt[1])/2.0 + cntrPt[1] # 繪制出來此文本createPlot.ax1.text(xMid, yMid, txtString)# 繪制樹形圖 def plotTree(myTree, parentPt, nodeTxt):numLeafs = getNumLeafs(myTree) # 得到葉節點的數,寬print 'numLeafs:',numLeafsdepth = getTreeDepth(myTree) # 獲得樹的層數,高firstStr = myTree.keys()[0] # 得到第一個劃分的特征# 計算坐標print 'plotTree.xOff:',plotTree.xOffprint 'plotTree.totalW:',plotTree.totalWcntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree.totalW, \plotTree.yOff)print 'cntrPt:',cntrPt # cntrPt是剛計算的坐標,parentPt是父節點坐標,nodeTxt目前為空字符plotMidText(cntrPt, parentPt, nodeTxt) # 繪制連接線上的文本plotNode(firstStr, cntrPt, parentPt, decisionNode) # 繪制樹節點secondDict = myTree[firstStr] # 下一級字典,即下一層plotTree.yOff = plotTree.yOff - 1.0/plotTree.totalD # 縱坐標降低for key in secondDict.keys():if type(secondDict[key]).__name__=='dict': # 如果是樹節點plotTree(secondDict[key],cntrPt,str(key)) #遞歸,繪制 else: #如果是一個葉節點,就繪制出來plotTree.xOff = plotTree.xOff + 1.0/plotTree.totalW # 定x坐標# secondDict[key]葉節點文本,(plotTree.xOff, plotTree.yOff)箭頭指向的坐標# cntrPt注釋(父節點)的坐標plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), cntrPt, leafNode) #繪制文本及連線plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key)) # 繪制父子填充文本plotTree.yOff = plotTree.yOff + 1.0/plotTree.totalD# 預留樹信息 def retrieveTree(i):listOfTrees =[{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}},{'no surfacing': {0: 'no', 1: {'flippers': {0: {'head': {0: 'no', 1: 'yes'}}, 1: 'no'}}}}]return listOfTrees[i]# Axis為坐標軸,Label為坐標軸標注。Tick為刻度線,ax是坐標系區域 def createPlot(inTree):fig = plt.figure(1, facecolor='white') fig.clf()# 橫縱坐標軸的刻度線,應該為空,加上范圍后,父子間的節點連線的填充文本位置錯亂axprops = dict(xticks=[], yticks=[]) # {'xticks': [], 'yticks': []}# createPlot.ax1創建繪圖區,無邊框,無刻度值createPlot.ax1 = plt.subplot(111, frameon=False, **axprops) #createPlot.ax1 = plt.subplot(111, frameon=False) # 計算樹形圖的全局變量,用于計算樹節點的擺放位置,將樹繪制在中心位置plotTree.totalW = float(getNumLeafs(inTree)) # plotTree.totalW保存的是樹的寬plotTree.totalD = float(getTreeDepth(inTree)) # plotTree.totalD保存的是樹的高plotTree.xOff = -0.5/plotTree.totalW # 決策樹起始橫坐標plotTree.yOff = 1.0 # 決策樹的起始縱坐標 plotTree(inTree, (0.5,1.0), '') # 繪制樹形圖plt.show() # 顯示mytree=retrieveTree(0) getNumLeafs(mytree) getTreeDepth(mytree) createPlot(mytree)

運行結果:

numLeafs: 3 plotTree.xOff: -0.166666666667 plotTree.totalW: 3.0 cntrPt: (0.5, 1.0) numLeafs: 2 plotTree.xOff: 0.166666666667 plotTree.totalW: 3.0 cntrPt: (0.6666666666666666, 0.5)

決策樹圖的上方代碼是算法過程中的一些參數變化,有助于理解。其中決策樹繪制過程中坐標的計算有點復雜。。。

下面是一些簡單的知識點:

函數也是對象,給一個對象綁定一個屬性就是這樣的:def f():pass f.a = 1print f.a >>> os.getcwd() 'C:\\Users\\LiLong' >>> os.chdir('C:\\Users\\LiLong\\Desktop\\decision_tree') >>> os.getcwd() 'C:\\Users\\LiLong\\Desktop\\decision_tree' >>>

使用決策樹分類并預測隱形眼鏡類型

tree_plot.py

# -*- coding: utf-8 -*- """ 繪制樹節點 Created on Thu Aug 10 10:37:02 2017 @author: LiLong """ #import decision_tree.py import matplotlib.pyplot as plt# boxstyle為文本框的類型,sawtooth是鋸齒形,fc是邊框線粗細 decisionNode = dict(boxstyle="sawtooth", fc="0.8") leafNode = dict(boxstyle="round4", fc="0.8") # 定義決策樹的葉子結點的描述屬性 arrow_args = dict(arrowstyle="<-") # 定義箭頭屬性,也可以是<->,效果就變成雙箭頭的了# 繪制結點文本和指向 def plotNode(nodeTxt, centerPt, parentPt, nodeType):#nodeTxt為要顯示的文本,xytext是文本的坐標,#xy是注釋點的坐標 ,nodeType是注釋邊框的屬性,arrowprops連接線的屬性createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords='axes fraction',xytext=centerPt, textcoords='axes fraction',va="center", ha="center", bbox=nodeType, arrowprops=arrow_args)# 獲取葉節點的數目 def getNumLeafs(myTree):numLeafs = 0firstStr = myTree.keys()[0] # 得到第一個鍵 secondDict = myTree[firstStr] # 得到第一個鍵對應的值 for key in secondDict.keys(): # 測試節點的數據類型是否是字典if type(secondDict[key]).__name__=='dict':numLeafs += getNumLeafs(secondDict[key]) # 又是遞歸調用else: numLeafs +=1return numLeafs # 返回葉節點數# 獲取樹的層數(遞歸在此就像是一層一層的剝到最里面,然后再從里到外加起來) def getTreeDepth(myTree):maxDepth = 0firstStr = myTree.keys()[0]secondDict = myTree[firstStr] for key in secondDict.keys(): #keys()函數得到的是key,是一個列表#print'key:',key# 測試節點的數據類型是否是字典,如果是字典說明是可以再分的,深度+1if type(secondDict[key]).__name__=='dict':thisDepth = 1 + getTreeDepth(secondDict[key]) # 遞歸調用,層層剝離字典else: thisDepth = 1if thisDepth > maxDepth: maxDepth = thisDepthreturn maxDepth# 繪制中間文本的坐標和顯示內容,即父子之間的填充文本 def plotMidText(cntrPt, parentPt, txtString):xMid = (parentPt[0]-cntrPt[0])/2.0 + cntrPt[0] # 求中間點的橫坐標 yMid = (parentPt[1]-cntrPt[1])/2.0 + cntrPt[1] # 繪制出來此文本createPlot.ax1.text(xMid, yMid, txtString)# 繪制樹形圖 def plotTree(myTree, parentPt, nodeTxt):numLeafs = getNumLeafs(myTree) # 得到葉節點的數,寬print 'numLeafs:',numLeafsdepth = getTreeDepth(myTree) # 獲得樹的層數,高firstStr = myTree.keys()[0] # 得到第一個劃分的特征# 計算坐標print 'plotTree.xOff:',plotTree.xOffprint 'plotTree.totalW:',plotTree.totalWcntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree.totalW, \plotTree.yOff)#print 'cntrPt:',cntrPt # cntrPt是剛計算的坐標,parentPt是父節點坐標,nodeTxt目前為空字符plotMidText(cntrPt, parentPt, nodeTxt) # 繪制連接線上的文本plotNode(firstStr, cntrPt, parentPt, decisionNode) # 繪制樹節點secondDict = myTree[firstStr] # 下一級字典,即下一層plotTree.yOff = plotTree.yOff - 1.0/plotTree.totalD # 縱坐標降低for key in secondDict.keys():if type(secondDict[key]).__name__=='dict': # 如果是樹節點plotTree(secondDict[key],cntrPt,str(key)) #遞歸,繪制 else: #如果是一個葉節點,就繪制出來plotTree.xOff = plotTree.xOff + 1.0/plotTree.totalW # 定x坐標# secondDict[key]葉節點文本,(plotTree.xOff, plotTree.yOff)箭頭指向的坐標# cntrPt注釋(父節點)的坐標plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), cntrPt, leafNode) #繪制文本及連線plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key)) # 繪制父子填充文本plotTree.yOff = plotTree.yOff + 1.0/plotTree.totalD# 預留樹信息 def retrieveTree(i):listOfTrees =[{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}},{'no surfacing': {0: 'no', 1: {'flippers': {0: {'head': {0: 'no', 1: 'yes'}}, 1: 'no'}}}}]return listOfTrees[i] # Axis為坐標軸,Label為坐標軸標注。Tick為刻度線,ax是坐標系區域 def createPlot(inTree):fig = plt.figure(1, facecolor='white') fig.clf()# 橫縱坐標軸的刻度線,應該為空,加上范圍后,父子間的節點連線的填充文本位置錯亂axprops = dict(xticks=[], yticks=[]) # {'xticks': [], 'yticks': []}# createPlot.ax1創建繪圖區,無邊框,無刻度值createPlot.ax1 = plt.subplot(111, frameon=False, **axprops) #createPlot.ax1 = plt.subplot(111, frameon=False) # 計算樹形圖的全局變量,用于計算樹節點的擺放位置,將樹繪制在中心位置plotTree.totalW = float(getNumLeafs(inTree)) # plotTree.totalW保存的是樹的寬plotTree.totalD = float(getTreeDepth(inTree)) # plotTree.totalD保存的是樹的高plotTree.xOff = -0.5/plotTree.totalW # 決策樹起始橫坐標plotTree.yOff = 1.0 # 決策樹的起始縱坐標 plotTree(inTree, (0.5,1.0), '') # 繪制樹形圖plt.show() # 顯示

decision_tree.py

# coding=utf-8 from math import log import operator import pickle import tree_plot # 導入decision_tree.py# 自己建立的數據 def createDataSet():# 各元素也是列表dataSet = [[1, 1, 'yes'],[1, 1, 'yes'],[1, 0, 'no'],[0, 1, 'no'],[0, 1, 'no']]labels = ['no surfacing','flippers'] # 特征標簽return dataSet, labels# 計算給定數據集的香農熵 def calcShannonEnt(dataSet):# 數據集中實例的總數numEntries = len(dataSet)# 頻數統計labelCounts = {}for featVec in dataSet: currentLabel = featVec[-1] # 最后一列作為標簽if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0labelCounts[currentLabel] += 1 # 統計不同的標簽數#print labelCountsshannonEnt = 0.0# 計算香農熵for key in labelCounts:prob = float(labelCounts[key])/numEntriesshannonEnt -= prob * log(prob,2) # 以2為底return shannonEnt# 按照給定特征劃分數據集,返回剩余特征 # 三個參數:待劃分的數據集,劃分的特征,需返回的特征的值 def splitDataSet(dataSet, axis, value): # 創建新的列表,避免影響原數據retDataSet = []for featVec in dataSet:if featVec[axis] == value: # 提取特定特征中的特定值reducedFeatVec = featVec[:axis] # 得到axis列之前列的特征# 在處理多個列表時,append()是添加的列表元素,而extend()添加的是元素reducedFeatVec.extend(featVec[axis+1:]) # 得到axis列之后列的特征retDataSet.append(reducedFeatVec)return retDataSet # 返回指定劃分特征外的特征# 選擇最好的數據集劃分方式,根據熵計算 def chooseBestFeatureToSplit(dataSet):numFeatures = len(dataSet[0]) - 1 # 留出來一列,把最后一列作為類別標簽baseEntropy = calcShannonEnt(dataSet) # 計算原始香濃熵,劃分前bestInfoGain = 0.0; bestFeature = -1 # 賦初值for i in range(numFeatures): # 迭代所有的特征# 使用列表推導來創建新的列表,featlist得到的是每列的特征元素featList = [example[i] for example in dataSet]print 'featList:',featListuniqueVals = set(featList) # 轉換為集合,以此確保其中的元素的唯一性print 'uniqueVals:',uniqueValsnewEntropy = 0.0 for value in uniqueVals:# 每一列按照不重復的元素劃分,返回剩余特征subDataSet = splitDataSet(dataSet, i, value) print 'subDataSet:',subDataSetprob = len(subDataSet)/float(len(dataSet)) # 頻率# 得到此次劃分的熵,此處的prob和calcShannonEnt()中的prob不是同一種,第一個# 是實例數在整體數組的頻率,第二個是部分數組中的標簽頻率,newEntropy求的是信息期望newEntropy += prob * calcShannonEnt(subDataSet) infoGain = baseEntropy - newEntropy # 計算信息增益,即熵的減少print 'infogain:',infoGainif (infoGain > bestInfoGain): #如果信息量減少,就把減少量作為基準bestInfoGain = infoGain bestFeature = i return bestFeature # 返回信息信息增益最高的特征列# 多數表決法決定葉節點分類 def majorityCnt(classList): # classList是分類名稱的列表classCount={} # 存儲每個類標簽出現的頻率for vote in classList:# 統計所有的不重復的keyif vote not in classCount.keys(): classCount[vote] = 0classCount[vote] += 1# 對分類進行倒序排列sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1),\reverse=True)# 返回出現次數最多的名稱return sortedClassCount[0][0]# 創建樹的函數代碼 def createTree(dataSet,labels): # labels存儲的是特征標簽classList = [example[-1] for example in dataSet] # 數據集的最后一列作為類標簽列表print 'classList:',classList# 判斷類別是否完全相同,通過查看類標簽的第一個的數目if classList.count(classList[0]) == len(classList): return classList[0]# 判斷是否遍歷完所有的特征,通過查看剩下的特征數是不是剩下一個if len(dataSet[0]) == 1: return majorityCnt(classList)bestFeat = chooseBestFeatureToSplit(dataSet) # 找到當前數據集最好的特征的索引bestFeatLabel = labels[bestFeat]myTree = {bestFeatLabel:{}} # 嵌套字典,得到一個當前最好的特征標簽del(labels[bestFeat]) # 刪除當前最好的特征標簽。即劃分時類別特征數目減少# 列表推到式得到數據集的最好特征標簽的那列featValues = [example[bestFeat] for example in dataSet] uniqueVals = set(featValues) # 集合確保元素的唯一性for value in uniqueVals:subLabels = labels[:] # 得到當前剩余的特征標簽 # 遞歸調用myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet,\bestFeat, value),subLabels)return myTree # 使用決策樹的分類函數 def classify(inputTree,featLabels,testVec):firstStr = inputTree.keys()[0] # 樹的第一個鍵secondDict = inputTree[firstStr] # 第一個鍵對應的值(字典)featIndex = featLabels.index(firstStr) # 第一個鍵(特征)在特征列表中的索引print 'featIndex:',featIndexkey = testVec[featIndex] # key是相應特征對應測試列表中的的取值,也即是父子節點間的判斷print 'key:',keyvalueOfFeat = secondDict[key] #print 'valueOfFeat:',valueOfFeatif isinstance(valueOfFeat, dict): classLabel = classify(valueOfFeat, featLabels, testVec)else: classLabel = valueOfFeatreturn classLabel# 使用pickle模塊儲存決策樹 def storeTree(inputTree,filename):with open(filename,'w') as fw: pickle.dump(inputTree,fw)def grabTree(filename):with open(filename,'r') as fr:return pickle.load(fr)# 執行分類 mydat,labels=createDataSet() # mydat,lables相當于全局變量 myTree=tree_plot.retrieveTree(0) # 樹字典 print classify(myTree,labels,[1,0]) # 輸出預測類型# 預測隱形眼鏡類型 with open('lenses.txt','r') as fr:# '\t'是tab分隔符,得到的是數組[[],[]....]lenses=[inst.strip().split('\t') for inst in fr.readlines()] lensesLabels=['age','prescript','astigmatic','tearRate']lensesTree=createTree(lenses,lensesLabels)#storeTree(lensesTree,'clf.txt')print 'load:',grabTree('clf.txt')tree_plot.createPlot(lensesTree)

運行結果:

noload: {'tearRate': {'reduced': 'no lenses', 'normal': {'astigmatic': {'yes': {'prescript': {'hyper': {'age': {'pre': 'no lenses', 'presbyopic': 'no lenses', 'young': 'hard'}}, 'myope': 'hard'}}, 'no': {'age': {'pre': 'soft', 'presbyopic': {'prescript': {'hyper': 'soft', 'myope': 'no lenses'}}, 'young': 'soft'}}}}}}

由此得到了決策樹。。

此處還有一個問題沒有解決:就是

myTree=tree_plot.retrieveTree(0) # 樹字典

數字典用的是寫好的,也可以說是運行得到的樹字典,但是間接的。
如果直接用運行得到的字典

# 執行分類' mydat,labels=createDataSet() # mydat,lables相當于全局變量 #myTree=tree_plot.retrieveTree(0) # 樹字典 myTree=createTree(dataSet,labels) print classify(myTree,labels,[1,0]) # 輸出預測類型

報錯:

featIndex = featLabel.index(str(firstStr)) # 第一個鍵(特征)在特征列表中的索引 ValueError: 'no surfacing' is not in list

這個問題還沒解決。。

總結

以上是生活随笔為你收集整理的决策树—ID3(源码解析)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲精品视频在线播放 | 亚洲va天堂va欧美ⅴa在线 | 日韩网站在线播放 | 国产精品白浆 | 久草在线手机视频 | 91av官网 | 少妇精69xxtheporn| 91成人国产| 久久夜夜操 | 久久激情网站 | 日韩最新在线 | 色激情在线 | 国产在线日本 | 精品国产99国产精品 | 日日射天天射 | 一级做a视频 | 国产成人免费观看久久久 | 久久精品男人的天堂 | 欧美色图p | 香蕉视频在线网站 | 在线观看视频一区二区三区 | 天天夜夜亚洲 | 一区在线播放 | 麻豆视频在线免费看 | 免费久久网站 | 免费合欢视频成人app | 少妇bbb搡bbbb搡bbbb| 日韩在线激情 | 天堂v中文 | 成人免费亚洲 | 久久高清免费观看 | 精品国产伦一区二区三区 | 国产v在线观看 | 中文字幕在线一区二区三区 | 欧美国产日韩一区二区三区 | 日本不卡123 | 国产男女无遮挡猛进猛出在线观看 | 狠狠狠狠狠狠狠 | 操一草 | 欧美一区二区精品在线 | 91最新网址 | 国产96在线视频 | 九九视频精品在线 | 在线观看黄网站 | 91久久精品日日躁夜夜躁国产 | 依人成人综合网 | 国产在线2020 | 91人人澡人人爽人人精品 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 色综合天 | av观看在线观看 | 狠狠色丁香久久婷婷综合_中 | 在线观看黄av | 天天草天天爽 | 一区二区三区视频在线 | 91看片淫黄大片在线播放 | 在线观看韩国av | 成人黄色毛片视频 | 国产视频中文字幕在线观看 | 特级大胆西西4444www | 久久视频这里有精品 | 婷婷 中文字幕 | 91av看片| 91麻豆精品国产午夜天堂 | 日韩综合色 | 中文字幕黄网 | 日本深夜福利视频 | 韩国av电影在线观看 | 五月综合婷 | 国产黄网站在线观看 | aaa日本高清在线播放免费观看 | 国产精品va最新国产精品视频 | 国产福利91精品 | 精品在线视频观看 | 在线观看av小说 | 精品国产亚洲一区二区麻豆 | 91成人欧美 | 福利视频在线看 | 日韩三级不卡 | 国产成人久久久久 | 91丨九色丨蝌蚪丨对白 | 天天av天天 | 高清av免费一区中文字幕 | 成人一区二区在线 | 免费观看国产精品 | 久久精品网站免费观看 | 99久久精品一区二区成人 | 国产精品成人久久久久久久 | 中文字幕在线专区 | 在线观看一区视频 | 91片网 | 久草免费看| 国产精品观看视频 | 成人av电影免费在线播放 | 久久96| 涩涩网站在线播放 | 三日本三级少妇三级99 | 国产麻豆视频在线观看 | 天天色天天爱天天射综合 | 欧美一级视频免费 | 亚洲精品中文字幕视频 | 日日夜夜干 | 日韩亚洲国产精品 | 久久精品国产免费看久久精品 | 在线黄色国产 | 91视频免费看 | 91视频免费看| 久久全国免费视频 | 综合天天网 | 天天爱天天干天天爽 | 成人毛片a | 在线观看www. | 日韩av有码在线 | 婷婷激情五月 | 国产99亚洲 | 欧洲激情在线 | 久久亚洲日本 | 夜色资源站wwwcom | 久久成人精品电影 | 日韩在线观看一区二区 | 欧美极品一区二区三区 | 国产手机视频在线播放 | 日韩精品91偷拍在线观看 | 国产美女网站在线观看 | 99视频在线免费看 | 超碰成人免费电影 | 91麻豆福利| 欧美精彩视频在线观看 | www久久九 | 精品国产伦一区二区三区观看说明 | 国产小视频精品 | 人人爽人人乐 | 久久成年人视频 | 亚洲永久精品国产 | 亚洲欧美视频一区二区三区 | 99av国产精品欲麻豆 | av高清一区 | 免费人成在线观看 | 超碰97在线看 | 国产一区在线免费 | 久久午夜鲁丝片 | 天天天操天天天干 | 91视频在线| 91精品国产91热久久久做人人 | 国产99一区视频免费 | 在线看日韩av | 天天射天天舔天天干 | 一级免费黄色 | 天天爽夜夜爽精品视频婷婷 | 成人av网站在线观看 | 国产精品国产三级国产aⅴ无密码 | 亚洲一级片 | 免费大片av| 亚洲精品伦理在线 | 成人在线观看资源 | 国产精品乱看 | 黄色高清视频在线观看 | 欧美精品久久久久性色 | 天天操天天艹 | 日韩在线三区 | 激情视频免费在线 | 91桃色国产在线播放 | 日韩剧情| 9999免费视频 | 亚洲四虎在线 | 天天鲁一鲁摸一摸爽一爽 | 天天色视频 | 日韩欧美精品在线 | 在线亚洲午夜片av大片 | 狠狠干.com| 超碰人人91 | 久久99精品国产99久久6尤 | 国产精品videossex国产高清 | 亚洲欧美国产精品 | 操操操干干干 | av高清影院 | 欧美-第1页-屁屁影院 | 国产日产高清dvd碟片 | 免费在线观看一区二区三区 | 精品在线视频播放 | 麻花传媒mv免费观看 | 99精品在线观看视频 | 日韩精品视频在线免费观看 | 日韩激情一二三区 | 免费在线观看av电影 | 成人va天堂| 9999在线视频| www.xxxx欧美 | 国产精品久久久久久69 | 亚洲成人免费观看 | 欧美日韩激情网 | 亚洲情影院 | 成人av视屏| 日韩精品aaa | 国产精品九九久久久久久久 | 亚洲综合情 | 欧美日韩精品免费观看 | 亚洲aⅴ久久精品 | 日本久久免费电影 | 国产视频欧美视频 | 99热亚洲精品| 精品国产乱码久久久久久天美 | 欧美日高清视频 | 久久久久久久久免费 | 91香蕉视频在线下载 | 亚洲精品国产第一综合99久久 | 亚洲a免费 | 日韩高清一区 | 日韩网站免费观看 | 99热最新网址 | 久久老司机精品视频 | 日韩一二三在线 | 国产黄免费 | 综合精品在线 | 精品国产91亚洲一区二区三区www | 欧美日韩国产一区二 | 成人全视频免费观看在线看 | 亚洲精品成人av在线 | 97在线观看免费高清完整版在线观看 | 亚洲国产欧美在线看片xxoo | 久久精品国产一区二区电影 | 日韩精品久久久免费观看夜色 | 久久精品爱爱视频 | 欧美 日韩 视频 | 狠狠色综合网站久久久久久久 | 天堂网中文在线 | 香蕉久久久久 | 福利久久久 | 久久久久免费网 | 一区在线电影 | 国产精品九九九九九九 | 色av色av色av| 四虎国产 | 欧亚日韩精品一区二区在线 | 日韩高清在线不卡 | 婷婷色网视频在线播放 | 亚洲综合激情五月 | 91成人区 | av中文在线 | 五月婷婷激情综合 | 国产福利午夜 | 人人干在线观看 | 四虎在线免费观看 | 中文国产字幕在线观看 | 日狠狠 | 国产精品久久久久久久久久久免费 | 五月婷婷丁香综合 | 亚洲精品av在线 | 精品国产伦一区二区三区观看方式 | 久久tv视频 | 97超碰在线久草超碰在线观看 | 69国产精品成人在线播放 | 国产日韩欧美视频 | 日韩精品一区二区在线视频 | 日批在线观看 | 91精品免费在线视频 | 久久久久中文字幕 | 综合久久综合久久 | 精品国产一区二区三区久久久蜜臀 | 五月天网页| 激情五月亚洲 | 天天操天天添 | 综合网在线视频 | 天天搞夜夜骑 | av成人动漫 | 中文字幕在线免费观看视频 | 九九九九免费视频 | 天天摸夜夜添 | 很黄很污的视频网站 | 91插插影库 | 亚州精品天堂中文字幕 | 日韩精品久久久免费观看夜色 | 久久艹久久 | 亚洲欧美国内爽妇网 | 国产精品免费在线播放 | 丁香五月亚洲综合在线 | 一级免费av | 国产专区精品视频 | 成人超碰在线 | a午夜在线 | 亚洲天堂精品视频 | 91传媒在线| 久久高清片 | 欧美成人h版在线观看 | 久久九九国产精品 | 一级黄色片毛片 | 青青河边草手机免费 | 激情视频在线观看网址 | 91视频在线观看免费 | 日日干日日 | 久久免费在线 | 日韩高清av在线 | 国产一二区免费视频 | av线上免费看 | 超碰成人av | 色婷婷精品 | 久久污视频 | 亚洲精品在线国产 | 欧美精品在线视频 | 99精品视频在线播放免费 | 美女免费视频观看网站 | 99一区二区三区 | 夜色成人网| 91中文字幕在线播放 | 中文字幕一区二区三区久久蜜桃 | 青青久草在线视频 | 天天做日日做天天爽视频免费 | 国内精品久久久久久久久久 | 麻豆小视频在线观看 | 久久激情五月婷婷 | av线上免费看 | 国产蜜臀av| 日韩美女一级片 | 久草视频在线资源站 | 91大神精品视频在线观看 | 国产午夜激情视频 | 国产亚洲片 | 四虎伊人 | 97超碰在线免费观看 | 天天爽天天摸 | 久草在线一免费新视频 | 国产在线精品一区二区三区 | 欧美视频在线观看免费网址 | 国产欧美日韩一区 | 国产对白av| 国产高h视频 | 国产精品久久久久久久久毛片 | 国产人成免费视频 | 国产成人av免费在线观看 | 97精品在线 | 国产精品久久99综合免费观看尤物 | 亚洲精品免费观看视频 | 国产在线a免费观看 | 蜜臀一区二区三区精品免费视频 | 国产一区二区在线看 | 91精品国产自产在线观看 | 亚洲激情视频在线 | 亚洲黄色在线播放 | 五月婷婷香蕉 | 在线看成人| 日本婷婷色 | 在线天堂中文www视软件 | 综合国产视频 | 九九视频网 | 在线影视 一区 二区 三区 | 亚洲精品xx | 五月婷影院 | 欧美日韩国产mv | 亚洲色图色 | 精品国精品自拍自在线 | 日韩影视大全 | 丁香久久| 综合五月| 一区二区三区日韩视频在线观看 | 蜜臀av夜夜澡人人爽人人桃色 | 久久涩视频 | 特级西西444www高清大视频 | 国产亚洲aⅴaaaaaa毛片 | 精品av在线播放 | 久久天堂亚洲 | 成年人电影免费看 | 久久久久久综合网天天 | 最近日本mv字幕免费观看 | 成人国产网站 | 青青河边草免费视频 | 亚洲精品播放 | 999国内精品永久免费视频 | 欧美久久久久久久久中文字幕 | 久久在线免费视频 | 欧美久久精品 | 国产一区二区高清视频 | 国产精品一区二区电影 | 精品国产一区二区三区日日嗨 | 超碰97人人爱 | 91av在线免费视频 | 最近中文字幕高清字幕在线视频 | 91精品视频免费 | 激情五月婷婷激情 | 国产在线国偷精品产拍 | 欧美做受高潮 | 久久99久久99| 亚洲第一伊人 | 在线免费视频 你懂得 | 久草99| 日韩在线免费看 | 午夜av电影院 | 日韩av一卡二卡三卡 | av成年人电影| 97在线视频免费观看 | 三级黄色免费 | av久久在线 | 国产精品免费观看网站 | 国产免费大片 | 香蕉视频免费在线播放 | 日日操天天操夜夜操 | 九色porny真实丨国产18 | 成人在线一区二区 | 99久久精品一区二区成人 | 三级午夜片| 欧美精品一区二区在线播放 | 免费精品人在线二线三线 | 免费久久久久久 | 久草爱视频 | 99热官网 | 亚洲免费国产 | 免费在线黄网 | 日韩精品欧美专区 | 天天拍夜夜拍 | 国产精品99久久久久久宅男 | 不卡的av中文字幕 | 亚洲精品动漫在线 | 97精品一区二区三区 | 高清视频一区 | 色婷在线 | 日产乱码一二三区别在线 | 国产精品麻豆99久久久久久 | 日韩精品中文字幕在线播放 | av高清一区二区三区 | 国产一区视频免费在线观看 | 久久激情精品 | 天天干天天做 | 久久99日韩| 福利视频区 | 亚洲电影黄色 | 玖草在线观看 | 手机看片| 天天鲁天天干天天射 | 国产中出在线观看 | 日韩欧美成| 久久久久久久久久久黄色 | 久久久精品亚洲 | 丁香六月中文字幕 | 国产专区视频在线 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产乱对白刺激视频在线观看女王 | 成人黄色资源 | 日韩网站免费观看 | www.伊人色.com| 久久这里只有精品9 | 日韩午夜高清 | 天天干天天射天天操 | 在线精品国产 | 亚洲区二区 | 色爽网站| 午夜丁香视频在线观看 | 久草影视在线 | 亚洲欧美视频在线播放 | 日本中文在线观看 | 久久99久久精品国产 | 91精品人成在线观看 | 欧美小视频在线观看 | 色综合久久66 | 国产精品久久久久久妇 | 日本天天色 | 热久久免费国产视频 | 午夜久久久久 | 一区二区三区免费在线观看视频 | 日韩毛片久久久 | 中国一级特黄毛片大片久久 | 在线观看黄色av | 精品国产一区二区三区久久久蜜月 | 国产精品自产拍 | 丁香婷婷综合网 | 亚洲草视频 | 日韩中文在线视频 | 亚洲最大av网站 | 国产91精品久久久久久 | 日本精品久久 | 国产在线播放一区 | 久久婷婷综合激情 | 99精品久久99久久久久 | 国产精品美女久久久 | 亚洲精品午夜国产va久久成人 | 国产又黄又爽无遮挡 | av中文天堂 | 日本一区二区三区免费观看 | 蜜桃视频精品 | 色视频网站在线观看一=区 a视频免费在线观看 | 九色91在线视频 | 国产精品欧美久久久久天天影视 | 久草热久草视频 | 日日夜日日干 | 97成人在线视频 | www.久热| 久久视影| 91成人短视频在线观看 | 日韩欧美99 | 在线国产能看的 | 人人澡人人澡人人 | 欧美另类成人 | 免费黄色在线网址 | 精品国产精品一区二区夜夜嗨 | 免费在线观看午夜视频 | 五月天最新网址 | 三级黄色免费片 | 97在线视频免费看 | 国产一区电影在线观看 | 91九色在线| 99精品欧美一区二区蜜桃免费 | 中文视频在线 | 在线观看国产亚洲 | 久久精品韩国 | 久久综合毛片 | 91香蕉视频 mp4 | 久草在线视频国产 | 日韩黄色在线观看 | 国产黄色免费在线观看 | 亚洲精选久久 | 一级片免费观看 | 久久不卡日韩美女 | 免费av观看| 99视频偷窥在线精品国自产拍 | 亚洲免费公开视频 | 日韩不卡高清视频 | 国产精品美女久久久久久网站 | av中文字幕网站 | 久久免费电影 | 九色porny真实丨国产18 | 国产字幕在线看 | av一区二区三区在线播放 | 不卡的av| 97成人在线观看视频 | 国产精品久久久久久久久久久久 | 欧美综合干| 视频在线99 | 国外调教视频网站 | 婷婷六月久久 | 色香蕉在线视频 | 日韩,中文字幕 | 1024手机看片国产 | 国产不卡av在线 | 狠狠色丁香婷婷综合久小说久 | 99久久精品国产一区二区三区 | 国产精品区在线观看 | 色吊丝在线永久观看最新版本 | 日韩美女免费线视频 | 亚洲国产欧美在线人成大黄瓜 | 在线观看91av | 伊人天天操 | 成人免费视频网站在线观看 | 亚洲精品白浆高清久久久久久 | 成人资源在线播放 | 91精品国产99久久久久 | 在线免费国产视频 | 日韩欧美精选 | 人人添人人澡人人澡人人人爽 | 欧美巨大荫蒂茸毛毛人妖 | 国产精品国产三级国产aⅴ无密码 | 国产手机av在线 | 亚洲91精品在线观看 | 午夜av电影院 | 色国产精品 | 久久精品爱爱视频 | 国产精品原创视频 | 久久精品人人做人人综合老师 | 日韩videos| 嫩模bbw搡bbbb搡bbbb | 成年人免费在线观看 | 中文字幕在线高清 | 日韩在线网址 | www.国产在线视频 | 欧美一级免费 | 夜色成人av | 亚洲成人精品久久 | 免费成人在线电影 | 国产999视频 | 日日夜夜网站 | 国产一级片不卡 | 亚洲精品一区二区18漫画 | 国产精品综合久久久久 | 成人毛片一区二区三区 | 国产视频精选在线 | 成年人免费av网站 | 日韩欧美一区二区三区在线观看 | 亚洲 综合 精品 | 精品一区中文字幕 | 天天躁日日躁狠狠躁av麻豆 | av网站免费看 | 国产高清在线免费观看 | 国产亚洲精品久 | 国产黄免费 | 99草视频 | www欧美xxxx| 69精品视频 | 亚洲综合一区二区精品导航 | 97视频在线 | 五月开心激情 | 国产精品免费视频网站 | 九九久久久 | 国产精品永久久久久久久www | 日韩视频在线观看视频 | 色综合中文综合网 | 日韩视频www | 亚洲www天堂com| 国产一区精品在线观看 | 日韩国产高清在线 | 精品久久一区二区三区 | 亚洲黄色片 | 国产日韩在线看 | 中文视频在线看 | 西西大胆免费视频 | 亚洲精品国产精品乱码不99热 | 久久久久欠精品国产毛片国产毛生 | 国产夫妻自拍av | 91精品国产福利在线观看 | 欧洲精品码一区二区三区免费看 | 国产美女在线精品免费观看 | 夜夜夜草 | 999色视频| 中文字幕丰满人伦在线 | 精品国偷自产在线 | 久久久久久久久国产 | 免费黄色在线播放 | 在线观看一级片 | 超碰国产在线 | 天天舔天天搞 | 91亚洲精品国偷拍 | 欧亚日韩精品一区二区在线 | 日韩有码在线观看视频 | 在线高清一区 | 久久久久二区 | 国产在线观看免费 | 亚洲精品成人在线 | 久久精品一区二区三区视频 | 在线观看自拍 | 国产中文字幕免费 | 四虎在线视频免费观看 | 欧美黄色免费 | 中文字幕国产视频 | 国产黄免费在线观看 | 8x成人在线 | 国产中文字幕一区 | 91精品免费在线视频 | 久久久伊人网 | 亚洲男人天堂a | 99热日本| 四虎成人精品永久免费av九九 | 国产在线a | 国产精品第二页 | 中文字幕亚洲字幕 | 在线观看久久久久久 | 中文字幕在线播放av | 在线观看小视频 | 日本中文乱码卡一卡二新区 | 免费a网站 | 五月天精品视频 | 一区中文字幕 | 日本中文字幕网 | 狠狠色丁香九九婷婷综合五月 | 最近日本韩国中文字幕 | 精品嫩模福利一区二区蜜臀 | 亚洲免费小视频 | 欧美精品亚洲精品日韩精品 | 亚洲国产成人在线播放 | 99久久精品免费看国产免费软件 | 成人国产精品免费观看 | 五月婷婷激情综合 | 亚洲精品国产综合99久久夜夜嗨 | 久久国产精品视频观看 | 国产精品免费视频网站 | 色就色,综合激情 | 亚洲国产精品影院 | 久久久九色精品国产一区二区三区 | 欧美91精品久久久久国产性生爱 | 亚洲春色奇米影视 | 色综合天天色综合 | 精品专区 | 在线观看91av| 伊人午夜| 伊人黄色网| 欧美精品乱码99久久影院 | 久草在线最新免费 | 亚洲成人网在线 | 婷婷激情欧美 | 国产小视频免费在线网址 | 91麻豆精品国产自产在线游戏 | 国产成人福利在线观看 | 天天操天天爽天天干 | 91大神电影 | 九色91在线 | 精品毛片一区二区免费看 | 在线91播放 | 日韩成人免费在线电影 | 色欧美成人精品a∨在线观看 | 午夜91视频 | 四虎最新域名 | 成人在线你懂得 | 成人久久18免费网站麻豆 | 婷婷激情站 | 亚洲综合在线一区二区三区 | 丁香激情综合久久伊人久久 | 超碰97成人 | 日本激情视频中文字幕 | 中文字幕在线一二 | 人人天天夜夜 | 天天草天天干 | 91欧美在线| 亚洲国产精品一区二区久久,亚洲午夜 | 亚洲视屏在线播放 | 成人av在线电影 | 久草精品在线 | 日韩com| 九九在线视频 | 国产99色 | 欧美精品久久久久久久亚洲调教 | 久久999久久| 最新一区二区三区 | 欧美另类调教 | 国产精品久久久久久久免费大片 | 91在线中文字幕 | 韩国一区二区av | 国产原创av片 | 天天综合导航 | 91热在线| 日韩中文字幕免费电影 | 在线亚洲高清视频 | 天堂久久电影网 | 久草视频资源 | 91在线免费观看国产 | 叶爱av在线 | 99久久99久久精品国产片果冰 | 夜夜澡人模人人添人人看 | av在线8 | 免费观看www视频 | 99精品热视频 | 国产免费av一区二区三区 | 成人久久毛片 | 国产午夜精品一区二区三区嫩草 | 国产精品久久久久婷婷二区次 | 中文在线a∨在线 | 久久精品福利视频 | 欧美激情视频一区二区三区 | 国产精品自在线 | 久久精品在线免费观看 | 天天色综合1| 四虎成人精品永久免费av | av一区在线播放 | 国产精品白丝av | 欧美精品v国产精品v日韩精品 | 91成人精品一区在线播放 | 日韩一级成人av | 免费午夜网站 | 婷婷成人亚洲综合国产xv88 | 日韩精品一区二区三区不卡 | 狠狠的干 | 久久久精品国产一区二区三区 | 黄色av免费 | 日韩欧美中文 | 亚洲欧洲国产精品 | 国产精品一区二区久久精品 | 在线亚洲播放 | 久久亚洲福利 | av成人在线电影 | 99免费看片 | 福利视频第一页 | 麻豆国产精品va在线观看不卡 | 亚洲四虎 | 亚洲一区二区高潮无套美女 | 国产精品久久免费看 | 水蜜桃亚洲一二三四在线 | 亚洲激情综合 | 91九色在线观看视频 | 亚洲视频在线观看免费 | av片在线观看免费 | 美腿丝袜av | 欧美在线观看视频免费 | 不卡日韩av| 色综合天天在线 | 懂色av一区二区在线播放 | 国产玖玖视频 | 国产免费av一区二区三区 | 99精品国产一区二区三区麻豆 | 狠狠色丁婷婷日日 | 久久综合欧美精品亚洲一区 | 免费三及片 | 激情婷婷 | 亚洲高清久久久 | 国产网站在线免费观看 | 欧美日韩伦理在线 | 免费美女av| 国产精品黄网站在线观看 | 中文字幕在线观看你懂的 | 国产亚洲精品v | 日韩两性视频 | 午夜.dj高清免费观看视频 | 天天干天天射天天爽 | 西西www4444大胆视频 | 国产精品18久久久久久vr | 一区二区三区在线免费播放 | 99这里只有精品视频 | 国产精美视频 | 久久久久久伊人 | 521色香蕉网站在线观看 | 深夜免费网站 | 97精品国产一二三产区 | 香蕉影视app | 久久99国产一区二区三区 | 国产成人在线精品 | 亚洲视频播放 | 在线免费黄网站 | 日日干夜夜骑 | 中文视频在线播放 | 国产一区二区三区黄 | 黄网站色视频免费观看 | 中文字幕亚洲精品日韩 | 91精品91 | 色视频在线免费观看 | 福利电影一区二区 | 91av片| 国产视频亚洲视频 | 久久少妇av | 精品久久综合 | 亚洲影视九九影院在线观看 | 国产精品成人自产拍在线观看 | 狠狠色丁香婷婷综合久小说久 | 深夜精品福利 | 天天操天天能 | 亚洲欧美乱综合图片区小说区 | a级片网站 | 美女禁18| 精品国产伦一区二区三区观看方式 | 欧美大片mv免费 | 久久久免费看 | 波多野结衣日韩 | 在线观看爱爱视频 | 日日爱影视 | 亚洲国产综合在线 | 国产一区二区在线影院 | 999久久久免费视频 午夜国产在线观看 | 在线日韩精品视频 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 在线视频a | 国产九色在线播放九色 | 九色琪琪久久综合网天天 | 中文一区在线观看 | 一区二区精品在线观看 | 婷婷四房综合激情五月 | 人人澡人 | 黄色免费大片 | 国产精品女人网站 | 天天操天天爽天天干 | 天天天色综合a | 久久综合桃花 | 久久综合久久综合九色 | 国产日产欧美在线观看 | 亚洲 欧美 国产 va在线影院 | 97精品欧美91久久久久久 | 日本精品一区二区三区在线观看 | 久久亚洲二区 | 在线观看视频黄 | 手机在线免费av | 国产精品麻豆果冻传媒在线播放 | 91在线免费观看国产 | 日韩一区二区三区在线看 | 亚洲欧洲中文日韩久久av乱码 | 91久久国产自产拍夜夜嗨 | 激情婷婷综合网 | 中文字幕精品一区久久久久 | 国产亚洲免费观看 | 久久爱导航 | 三级av片 | 亚洲码国产日韩欧美高潮在线播放 | 91亚色视频 | 久久精品国产精品亚洲精品 | 天天射综合网视频 | 久久久精品视频成人 | 成人激情开心网 | 色婷婷99| 久久久久久久久久久久久久av | 亚洲视频专区在线 | 日韩精品一区二区在线观看 | 黄色免费在线视频 | 天天干视频在线 | 激情小说久久 | 久久精彩 | 欧美 激情 国产 91 在线 | 96精品高清视频在线观看软件特色 | 成人免费在线电影 | 欧美一性一交一乱 | 99热超碰 | 日本少妇久久久 | 久久久久久美女 | 中文字幕av网站 | 久青草视频在线观看 | 9ⅰ精品久久久久久久久中文字幕 | 九九免费在线观看视频 | 九九视频在线 | 美女网站在线观看 | 97色噜噜| 久保带人 | 亚洲精品午夜一区人人爽 | 婷婷五综合| 国产精品久久久久久久久久久久午夜片 | 欧美大片在线观看一区 | 欧美国产精品久久久久久免费 | 免费高清看电视网站 | 天天干天天天 | 久久亚洲免费视频 | 久久草精品 | 免费在线观看av网址 | 国产精品视频在线看 | 国产精品黄色影片导航在线观看 | 精品伊人久久久 | 国产在线a不卡 | 色偷偷97 | 日本精品小视频 | 亚洲黄色片一级 | 免费久久久久久 | 91精品国产成人观看 | 91av在线播放视频 | 日韩xxxbbb | 国产亚洲精品久久久久秋 | 色资源在线观看 | 日本中文字幕在线 | 国产在线观看免费av | 色停停五月天 | 黄色网在线免费观看 | 成年人视频在线观看免费 | 黄色av电影在线 | 久久久久久久久久久久99 | 国产精品成人一区二区三区吃奶 | 青青草国产精品 | 在线日韩 | 免费a v视频| 一区二区三区污 | 国产.精品.日韩.另类.中文.在线.播放 | 国产一区二区不卡视频 | 在线观看的a站 | 中文不卡视频 | 九色自拍视频 | 中文字幕免费一区二区 | 香蕉视频免费在线播放 | 亚洲 欧美 国产 va在线影院 | 亚洲天堂首页 | 亚洲欧美激情插 | 久久人91精品久久久久久不卡 | 国产不卡精品 | 在线亚州| 在线免费黄色av | 日韩最新中文字幕 | 久久人人爽人人爽人人片 | 久久国产片 | 国产欧美在线一区二区三区 | bayu135国产精品视频 | 丁香久久婷婷 | 亚洲涩涩色 | 九色在线 | 91在线免费看片 | 亚洲国内精品在线 | 国产丝袜制服在线 | 97超碰人人澡人人爱 | 亚洲日本在线一区 | 国产精品成人国产乱 | 亚洲综合成人在线 | 激情视频二区 | 四虎国产精品成人免费影视 | 在线观看免费福利 | 亚洲精品高清一区二区三区四区 | 美女啪啪图片 | 久久99亚洲网美利坚合众国 | www激情网 | 欧美精品国产综合久久 | 天天操天天干天天爱 | 日韩av在线免费播放 | 亚洲砖区区免费 | 中文字幕色播 | 天天夜夜狠狠操 | 国产精品视频区 | 欧美一级特黄aaaaaa大片在线观看 | 国产视频久久久久 | 久草精品网 | 久久免视频 | 欧美视频18| 国产伦精品一区二区三区在线 | 婷婷在线网站 | 久久国产精品一区二区三区四区 | 国产日产精品久久久久快鸭 | 中文字幕综合在线 | 亚洲涩涩网站 | 激情五月***国产精品 | 国内丰满少妇猛烈精品播放 | 色全色在线资源网 | 国产麻豆电影 | 日韩高清免费在线观看 | 国产精品视频久久 | 日韩中字在线观看 | 人人干狠狠干 | 99精品视频在线观看视频 | 波多野结衣一区 | 91精品1区2区 | 免费高清男女打扑克视频 | 男女拍拍免费视频 | 天天干天天操人体 | 国产精品乱码久久 | 国产日韩在线视频 | 精品美女视频 | 成人在线你懂得 | av在线播放免费 |