1. 程式人生 > 其它 >決策樹學習筆記

決策樹學習筆記

參考資料:

  1. 《機器學習》周志華
  2. 《統計學習方法》李航

1. 決策樹生成演算法

決策樹的演算法如圖所示:

第2行和第4行是對新生成節點進行類別標記。第9行開始是迴圈分裂node節點,為最優特徵的每一個值生成葉子節點。

第8行是重點,它決定了決策樹的生長方式:當我有不止一個特徵時,我該如何選擇一個”最優“特徵作為節點分裂的依據?

2. 劃分最優特徵

最優特徵是通過資訊熵和資訊增益來確定的。所謂的”最優“就是我們希望最早作為節點分裂依據的特徵是最具有區分度的,其分支節點儘可能屬於同一類別,也就是節點的”純度“越高。

2.1 資訊增益

資訊熵是度量樣本集合純度的常用指標。它利用了負對數函式 f(x) = -log(p), 該函式同時滿足了概率上升時不確定性的減少

不同概率對應的不確定性的可加性。資訊熵的定義為:

\[Ent(D) = - \sum^{|y|}_{k=1}{p_k log_2 p_k} \]

其中,pk是樣本集D中第k類樣本所佔的比例。Ent(D)的值越小,D的純度越高。

資訊增益可以由資訊熵計算得到。假定離散屬性a由V個可能的取值,則用a對樣本集D進行劃分可以得到V個分支節點。定義資訊增益為:

\[Gain(D,a) = Ent(D) - \sum_{v=1}^V \frac{|D^V|}{|D|}Ent(D^v) \]

其中,|Dv|/|D|權重使樣本數越多的分支節點的影響越大。最終選出的屬性是 a = argmaxa∈AGain(G, a)

,即所有特徵中使得資訊增益最大的一個特徵*。

2.2 增益率

單純通過資訊增益存在一個問題:如果資料中存在一個例如“id”的屬性,擁有極高的資訊純度,但並不能有效的作為分類特徵,決策樹不具備泛化能力。一種方法是從資料中刪除這一列。另一種方法則是使用增益率代替資訊增益作為特徵劃分依據。G4.5演算法不直接通過資訊增益,而是通過增益率選擇最優劃分屬性。

\[Gain\underline{} ratio(D,a) = \frac{Gain(D,a)}{IV(a)} \\ IV(a) = -\sum^{V}_{v=1} \frac{|D^v|}{|D|} log_2 \frac{|D^v|}{|D|} \]

IV(a)稱為屬性a的”固有值“,a可取的數目越多,IV(a)的值也就會越大。

2.3 基尼指數

CART決策樹使用基尼指數來劃分特徵:

\[Gini(D) = \sum^{|y|}_{k=1} \sum_{k'=k} p_k p_k' = 1- \sum^{|y|}_{k=1}p_k^2 \]

基尼指數計算式最後一項是取出兩個樣本,屬於同一個標籤的概率總和,被1減後就是兩個樣本不屬於同意標籤的概率。所以基尼指數越小,資料集D的純度就越高。

3. 決策樹剪枝

剪枝是一種很好的防止過擬合的方法。決策樹生成過程只考慮提高資訊增益對訓練資料進行更好的擬合,剪枝則是通過優化損失函式來減小模型複雜度。決策樹生成學習區域性的模型,決策樹剪枝學習整體的模型

決策樹的損失函式可以定義為:

\[C_{\alpha}(T) = \sum^{|T|}_{t=1}N_t H_t(T)+\alpha|T| \]

其中,|T|是樹的節點個數,t是葉子節點,Nt是節點t的樣本點數,其中由Ntk個屬於k類的樣本點。Ht(T)是節點t的經驗熵,α>=0是引數。

經驗熵為:

\[H_t(T) = -\sum_{k}\frac{N_{tk}}{N_t} log \frac{N_{tk}}{N_t} \]

剪枝過程:計算每個節點的經驗熵,遞迴地從樹的葉節點回縮。

一組葉節點回縮到其父節點前後的整體決策樹分別為TB, TA,如果其對應的損失函式Cα(TA) <= Cα(TB),則進行剪枝,父節點變為新的葉節點。

4. 連續與缺失值

4.1 連續值處理

連續屬性:例如人的身高,從180 cm到181 cm之間有無數個數值。與之相對的是離散屬性,例如拋硬幣,之可能出現0和1,是有限種可能。

假設連續屬性a在樣本集D上出現了n個不同取值,可以將這n個數值排序,在其中選取一個分割點t,大於t的和不大於t的分別可以作為離散屬性處理。

例如,可以將資訊增益函式改寫為Gain(D, a, t) t∈T,選取出使得資訊增益最大的t作為分割點。

4.2 缺失值處理

一條資料中可能會有有一個或多個屬性的資料缺失。這個問題主要體現在影響屬性劃分上。

假設樣本資料中包含了無缺失值樣本,和在某個屬性上有缺失值的樣本。現在定義三個變數:

  • ρ表示無缺失值樣本所佔的比例
  • \tilde{pk}表示無缺失值樣本中第k類所佔的比例
  • \tilde{rv}表示無缺失值樣本在屬性α上取值為αv的樣本所佔的比例

以此推廣資訊增益的計算式:

\[Gain(G,a) = \rho \times Gain(\tilde{D},a) = \rho \times (Ent(\tilde{D})-\sum^{V}_{v=1}(\tilde{D^v})) \]

其中:

\[Ent(\tilde{D}) = -\sum^{|y|}_{k=1}\tilde{p_k} log_2 \tilde{p_k} \]

直觀的來看,最終的結果是讓有缺失值的數值在缺失的屬性上劃入所有子節點,但是以不同的概率