遞迴構建決策樹

2021-08-21 20:43:06 字數 2251 閱讀 9324

def

majoritycnt

(classlist):

#傳入的引數是已經劃分完所有特徵之後的資料集,例如[['yes'],['yes'],['maybe']]

classcount={}#建立乙個字典

for vote in classlist:

if vote not

in classcount.keys():classcount[vote] = 0

classcount[vote] += 1

#根據上述迴圈和例子,可以得出

sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1),reverse=ture)

return sortedclasscount[0][0]

重點不明白

sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1),reverse=ture)
使用iteritems()這個函式得到我們字典中的所有元素,就是鍵-值對

之後定義乙個叫做key的函式,這個名字可以任意取,key只是習慣性定義的

之後通過itemgetter函式對字典中的元素進行排序,operator.itemgetter(1)表示按照元素的第二個進行排序,指按鍵-值對的值來排,也就是分類出現的多少。

reverse=true 表示按照遞減的順序來排序,即降序。

sortedclasscount[0][0]表示的是按照分類的個數最多的元素的那個類。

補了一下python裡的字典概念

乙個簡單的字典

alien_0 = 

print(alien_0['color'])

print(alien_0['points'])

結果green 5

字典是一系列的鍵-值對。每乙個鍵都與乙個值相關聯。

構建樹的函式**

def

createtree

(dataset,labels):

classlist = [example[-1] for example in dataset]#取出最後一列

if classlist.count(classlist[0]) == len(classlist):

return classlist[0]

#類別完全相同則停止繼續劃分,count()函式中接受乙個引數,表示的是這個引數在某個序列中出現的次數

#如果這個classlist中的元素完全相同,那麼這個引數的count(classlist[0])應該是等於classlist的長度

if len(dataset[0]) == 1:

return majoritycnt(classlist)

bestfeat = choosebestfeaturetosplit(dataset)#返回的是最好的特徵的位置,例如0

bestfeatlabel = labels[bestfeat]#儲存的是最好的特徵的標籤

mytree = }#構建資料字典

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

>>> 

import trees

>>>

from imp import reload

>>> reload(trees)

'trees'

from

'e:\\python\\trees.py'>

>>> mydat,labels=trees.createdataset()

>>> mytree = trees.createtree(mydat,labels)

>>> mytree

}}}>>>

決策樹構建

from sklearn import tree import pydotplus x 0,0 1,1 y 0,1 clf tree.decisiontreeclassifier 決策樹分類器 clf clf.fit x,y 對樣本x和對應的類y訓練決策樹 clf.predict 2.2.為乙個新的...

決策樹 ID3構建決策樹

coding utf 8 from math import log import operator 建立訓練資料集 defcreatedataset dataset 1,1,yes 1,1,yes 1,0,no 0,1,no 0,1,no 資料集的最後乙個元素作為該資料的標籤,是否是魚 labels...

利用資訊熵構建決策樹

決策樹演算法普遍存在於我們的日常生活中,我們在不經意間就會使用到決策樹。比如你在糾結是否要去一家公司工作時,可能會用到下面的決策樹 整個決策過程是這樣的 如果公司待遇高,你可能就願意去 如果待遇不高,你可能會繼續考慮公司的平台好不好。如果連平台都不好,那就直接拒絕。如果平台很好,你就會繼續考慮自己在...