機器學習python實戰 決策樹

2021-07-08 15:57:34 字數 1951 閱讀 7541

決策樹演算法是一種逼近離散函式值的方法

通過把例項從根節點排列到某個葉子結點來對例項分類。葉子結點即為例項所屬的分類。樹上的每乙個結點指定了對例項的某個屬性的測試,並且該結點的每乙個後繼分支對應於該屬性的乙個可能值。分類例項的方法是從這棵樹的根節點開始,測試這個結點的屬性,然後按照給定例項的屬性值對應的樹枝向下移動。然後這個過程在以新結點的根的子樹上重複。

構造決策樹的時候,第乙個需要解決的問題是:當前資料集上哪個特徵在劃分資料分類時起決定性作用。

為了找到決定性的特徵,劃分出最好的結果,我們必須評估每個特徵。完成測試之後,原始資料集就被劃分為幾個資料子集。這些資料子集會分布在第乙個決策點的所有分支上。如果某個分支下的資料屬於同一型別,則當前已經正確劃分資料型別如果資料不屬於同一型別,則需要重複劃分資料子集的過程。

如何劃分資料子集的演算法和劃分原始資料集的方法相同,直到所有具有相同型別的資料均在乙個資料子集內。

createbranch():

檢測資料集中的每個子項是否屬於同一分類:

if so return 類標籤;

else

尋找劃分資料集的最好特徵

劃分資料集

建立分支節點

for 每個劃分的子集

呼叫函式createbranch並增加返回結果到分支節點中

return 分支節點

收集資料

準備資料:樹構造演算法只適用於標稱型資料,因此數值型資料必須離散化。

分析資料:可以使用任何方法,構造樹完成之後,我們應該檢查圖形是否符合預期。

訓練演算法:使用經驗樹計算錯誤率

測試演算法:使用經驗樹計算錯誤率。

使用演算法

資訊增益(information gain)

劃分資料的最大原則是:將無序的資料變得更加有序。

在劃分資料集之前之後資訊發生的變化稱為資訊增益,計算每個特徵值劃分資料集獲得的資訊增益,活的資訊增益最高的特徵就是最好的選擇。

如何計算資訊增益?我們利用來度量(還有一種叫做基尼不純度gini impurity)

集合資訊的度量方式稱為熵定義為資訊的期望值

那麼資訊的定義:

如果待分類的事務可能劃分在多個分類之中,則符號xi的資訊定義:

l(xi)=-log2p(xi) 其中p(xi) 是選擇該分類的概率

計算熵的公式 h=-p(xi)log2p(xi)(從i=1到n求和)

python實現:計算給定資料集的熵

from math import log

defcalcshannonent

(dataset):

numentries = len(dataset) #計算數集中例項的總數

labelcounts = {} #建立乙個字典,鍵是最後一列的數值

for featvec in dataset:

currentlabel = featvec[-1]

if currentlabel not

in labelcounts.keys():

labelcounts[currentlabel] = 0

#如果當前鍵不存在,則擴充套件字典並將當前鍵值加入字典

labelcounts[currentlabel] += 1

# 當前類別鍵值加一,鍵值代表著類別出現的次數

shannonent =0.0

for key in labelcounts:

prob = float(labelcounts)/numentries

shannonent -= prob *log(prob,2)

#利用熵公式計算

return shannonent

劃分資料集

機器學習實戰 決策樹

決策樹 2 python語言在函式中傳遞的是列表的引用,在函式內部對列表物件的修改,將會影響該列表物件的整個生存週期。為了消除這個不良影響,我們需要在函式的開始宣告乙個新列表物件。在本節中,指的是在劃分資料集函式中,傳遞的引數dataset列表的引用,為了不影響dataset我們重新宣告了乙個ret...

機器學習實戰決策樹

這幾天一直在學習機器學習實戰python 實現,在程式清單的3 6 獲取及誒單數程式,書上的程式是這樣的 def getnumleafs mytree numleafs 0.0 firststr list dict.keys mytree 0 seconddict mytree firststr p...

機器學習實戰 決策樹

class sklearn.tree.decisiontreeclassifier criterion gini splitter best max depth none,min samples split 2,min samples leaf 1,min weight fraction leaf ...