機器學習之決策樹

2021-08-09 23:54:19 字數 2967 閱讀 8197

在這裡,我想以更直觀的方式幫助各位理解、掌握並且運用【注意:是運用】決策樹,從而為機器學習作鋪墊。

ps:但還是希望大家稍微知道決策樹大概是什麼樣子。

1.根結點(root node):沒有入邊,但有零條或多條出邊

2.內部結點(internal node):恰有一條入邊和 兩條或多條出邊

3.葉結點(leaf node): 恰有一條入邊,無出邊

4.熵(entropy):這個不太容易解釋。首先,一條資訊的資訊量大小和它的不確定性有直接的關係,要搞清楚一件非常非常不確定的事,需要了解大量資訊。所以,資訊量的度量就等於不確定性的多少。而不確定性越大,則熵也就越大。

熵的計算公式為:(後面會很重要

這裡:p表示概率。後面會以計算的形式來闡述怎麼使用。

決策樹是由乙個乙個結點組成的,結點其實就是判斷條件。但條件眾多,選擇哪個條件為根結點,哪些條件為內部結點,需要根據資訊獲取量(info gain)來計算。

公式:gain(a) = info(d) - info_a[d];通過a作為結點分類獲取了多少資訊。

d:資料集。

先看一組資料:

14個樣本,9個buy。4個不buy。可以得到整個資料集的熵。

然後計算以age為根結點的熵。其中5個youth,4個mid,5個senior。根據公式計算熵。

然後計算info gain。

計算完後,分別以其他屬性為根節點的熵。最終確定age為根結點。然後不考慮age,在下個結點中用同樣方法選取。

只要結點設定好了,其實決策樹就差不多完成了。

# -*- coding: utf-8 -*-

'''@author: mckee

'''import csv

from sklearn.feature_extraction import dictvectorizer

from sklearn import tree

if __name__ == '__main__':

attributelist =

labellist =

#首先上面表中資訊儲存與csv檔案中,所以需要讀取出來

handle = csv.reader(open('data.csv'))

n = 0

for line in handle:

if n == 0:

attribute = line #第一行就是屬性名稱

else:

if line[-1] == 'yes':

else:

feature = {}

feature[attribute[1]] = line[1]

feature[attribute[2]] = line[2]

feature[attribute[3]] = line[3]

feature[attribute[4]] = line[4]

n = n+1

vec = dictvectorizer()

feature_matrix = vec.fit_transform(attributelist).toarray()#因為屬性中的值都是string,所以需要轉化為0,1.例:乙個年輕人:老中青的value就是[0 0 1].

describe = ['middle_aged','senior','youth','excellent','fair','high','low','medium','no','yes']#這是對上面生成的矩陣每列含義進行描述,便於理解

print feature_matrix

print describe

print labellist

classifier = tree.decisiontreeclassifier(criterion='entropy')

print classifier #分類器的預設引數

classifier = classifier.fit(feature_matrix,labellist)

handle1 = open('decisiontree.txt','w')

handle1 = tree.export_graphviz(classifier,feature_names = vec.get_feature_names(),out_file=handle1)#將生成的決策樹輸出

#決策樹建立好,就可以對第三方測試集進行測試。

test = feature_matrix[2]

predict = classifier.predict(test)

print predict

生成的決策樹為:

為了更直觀理解,我動手畫了一下。

1.優點:直觀、便於理解,小規模資料集有效

2.缺點:(1)處理連續變數不好,比如income,需要設定閾值進行離散化eg:>10k , <20k,>20k

(2)類別較多時,錯誤增加比較快

(3) 可規模性一般

上傳一下自己的筆記,以後自己回顧也更方便

機器學習之決策樹

決策樹是很常見的機器學習分類演算法,竟然叫決策樹,那麼它的模型其實就像樹一樣。通過對樣本集的學習,挖掘出有用的規則。對於程式設計師來說或許以條件語句來看就更好理解了,決策樹可以看成是多個if then條件語句的集合。這種模型等同於我們寫的條件語句,所以它的 分類速度是很快的。來個例子了解下決策樹分類...

機器學習之決策樹

簡介 決策樹是一種基本的分類方法,當然也可以用於回歸。我們一般只討論用於分類的決策樹。決策樹模型呈樹形結構。在分類問題中,表示基於特徵對例項進行分類的過程,它可以認為是if then規則的集合。在決策樹的結構中,每乙個例項都被一條路徑或者一條規則所覆蓋。通常決策樹學習包括三個步驟 特徵選擇 決策樹的...

機器學習之決策樹

1.利用資訊增益來進行決策樹的屬性劃分時選擇屬性的資訊增益較大的。資訊增益準則對可取值數目較多的屬性有多偏好 id3 增益率準則對可取值數目較少的屬性有多偏好 c4.5 因此,c4.5演算法並不是直接選擇增益率較大的時候選劃分屬性,而是使用了乙個啟發式 先從候選屬性中找出資訊增益高於平均水平的屬性,...