1. 程式人生 > >機器學習十大經典演算法之決策樹(學習筆記整理)

機器學習十大經典演算法之決策樹(學習筆記整理)

一、決策樹概述

決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉節點代表一種類別。決策樹是一個預測模型,代表的是物件屬性與物件值之間的一種對映關係。

a 最初的節點稱為根節點(如圖中的"顏色"),有分支的節點稱為中間節點(如圖中的"價格"),無分支的節點稱為葉節點(如圖中的"喜歡")

優點:計算複雜度不高,輸出結果容易理解,對中間值的缺失不敏感,可以處理不相關特徵資料 缺點:可能產生過擬合問題 適用資料型別:數值型和標稱型

二、節點變數的選擇

應該選擇哪些變數作為根節點或中間節點生成決策樹,目前主流的有三種方法。

1.ID3演算法

(1) 資訊的定義: 事件的不確定性越大,則其資訊越多l

(xi)=log2P(xi)l(x_i)=-\log_2P(x_i)其中xi是某一事件的第i個可能值,P(xi)為其概率。 (2) 資訊熵的定義: 資訊熵為資訊的數學期望H=k=1Kpklog2pkH=-\sum_{k=1}^{K}{p_k\log_2p_k}某一事件有K個值,pk表示第k個值發生的概率。 實際應用中可以用頻率替換實際概率pkH(D)=k=1KCkDlog2CkDH(D)=-\sum_{k=1}^{K}{\frac {|C_k|} {|D|}\log_2\frac {|C_k|} {|D|}}
其中|D|表示事件中的所有樣本點,|Ck|表示事件的第k個可能值出現的次數。 (3) 條件熵H(DA)=i,kp(Ai)H(DkAi)=i=1nP(Ai)k=1KP(DkAi)log2P(DkAi)H(D|A)=\sum_{i,k}{p(A_i)H(D_k|A_i)}=-\sum_{i=1}^{n}{P(A_i)\sum_{k=1}^{K}{P(D_k|A_i)\log_2P(D_k|A_i)}}其中P(Ai)為事件A第i種值對應的概率,P(Dk|Ai)為已知Ai的情況下D事件為第k種值的概率,即條件概率。 以頻率代替概率: H(DA)=i=1nDiDk=1KDikDilog2DikDiH(D|A)=-\sum_{i=1}^{n}{\frac {|D_i|} {|D|}\sum_{k=1}^{K}{\frac {|D_{ik}|} {|D_i|}\log_2\frac {|D_{ik}|} {|D_i|}}}其中|Di|為Ai的頻數,|Dik|為Ai下D事件為第k種值的頻數。 (4) 資訊增益GainA(D)=H(D)H(DA)Gain_A(D)=H(D)-H(D|A)事件A對事件D的影響越大,則其條件熵H(D|A)就會越小,資訊增益就越大。根節點或中間節點變數的選擇,就是選擇使因變數的資訊增益最大的自變數。

2.C4.5演算法

ID3演算法資訊增益會偏向於取值較多的變數,極端例子如果一個變數的取值正好是N個,則其熵會等於0,在該變數下因變數的資訊增益一定是最大的,為了克服這種缺點,C4.5演算法使用資訊增益率對根節點或中間節點進行選擇。 GainRatioA(D)=GainA(D)HAGainRatio_A(D)=\frac {Gain_A(D)} {H_A}其中HA為事件A的資訊熵。時間A的取值越多,資訊增益GainA(D)可能越大,但同時HA也會越大,這樣就以商的形式實現了對資訊增益的懲罰。

3.CART演算法

ID3C4.5只能對離散型因變數進行分類,而CART可以處理連續型因變數。CART演算法基尼指數對根節點或中間節點進行選擇。Python的sklearn模組使用的便是CART演算法。 Gini=k=1Kpk(1pk)=1k=1Kpk2Gini=\sum_{k=1}^{K}{p_k(1-p_k)}=1-\sum_{k=1}^{K}{p_k^2}其中pk為事件第k個可能值發生的概率。 以頻率代替實際概率:Gini(D)=1k=1K(CkD)2Gini(D)=1-\sum_{k=1}^{K}{(\frac {|C_k|} {|D|})^2} 條件基尼指數GiniA(D)=i,kP(Ai)Gini(DkAi)=i=12P(Ai)(1k=1Kpik2)Gini_A(D)=\sum_{i,k}{P(A_i)Gini(D_k|A_i)}=\sum_{i=1}^{2}{P(A_i)(1-\sum_{k=1}^{K}{p_{ik}^2})} GiniA(D)=i=12DiD(1k=1K(DikDi)2)Gini_A(D)=\sum_{i=1}^{2}{\frac {|D_i|} {|D|}(1-\sum_{k=1}^{K}{(\frac {|D_{ik}|} {|D_i|})^2})} ΔGini(D)=Gini(D)GiniA(D)\Delta Gini(D)=Gini(D)-Gini_A(D)

三、決策樹的剪枝

無論是用ID3C4.5還是CART生成的決策樹,都可能存在過擬合的問題,因此經常需要對決策樹進行剪枝。

預剪枝

預剪枝是在樹的生長過程中就對其進行必要的剪枝,如限制樹的最大深度、限制中間節點和葉節點所包含的最小樣本量、限制生成的最多葉節點數量等。

後剪枝

後剪枝是在樹充分生長後再對其返工剪枝。

1.誤差降低剪枝法(Reduced-Error Pruning, REP)

將某一非葉節點的子孫節點刪除,使其變為新的葉節點。新葉節點的類別確定是利用該節點剪枝前包含的所有葉節點投票,頻數最高的類別作為新的類別。利用測試集的資料對比剪枝前後的誤判樣本量,如果新樹的誤判樣本量少於老樹,則可以剪枝,否則不可剪枝。重複此步驟直到達到最大的預測準確率。由於使用測試集,該方法可能導致剪枝過度。

2.悲觀剪枝法(Pessimistic Error Pruning, PEP)

自上向下的剪枝會增加誤判率,因此對葉節點的誤判個數增加一個經驗性的懲罰係數0.5。 剪枝後的誤判率e(T)=(E(T)+0.5)/Ne'(T)=(E(T)+0.5)/N剪枝前的誤判率e(Tt)=(i=1LE(ti)+0.5)/(i=1LNi)e'(T_t)=(\sum_{i=1}^{L}{E(t_i)+0.5})/(\sum_{i=1}^{L}{N_i})