決策樹


決策樹思維導圖[3]

1 信息論基礎

1.1 熵

熵是度量樣本集合純度最常用的一種指標。假定當前樣本集合\(D\)中第\(k\)類樣本所占的比例為\(p_{k}(k=1,2,...,|K|)\),則樣本集合\(D\)的熵定義為:

\[Ent(D)=-\sum_{k=1}^{K}p_{k}log_{2}p_{k} \]

\(Ent(D)\)的值越小,則\(D\)的純度越高。

1.2 信息增益

假定離散屬性\(a\)\(V\)個可能的取值\(\{a^{1}, a^{2}, ..., a^{V}\}\),若使用\(a\)對樣本集\(D\)進行划分,則會產生\(V\)個分支,其中第\(v\)個分支包含了\(D\)中所有在屬性\(a\)上取值為\(a^{v}\)的樣本,記為\(D^{v}\)。我們可以根據熵的公式計算出樣本集\(D^{v}\)的信息熵,再考慮到不同分支節點所包含的樣本數量不同,給分支節點賦予權重\(|D^{v}|/|D|\)。於是可計算出用屬性\(a\)對樣本集\(D\)進行划分所獲得的信息增益:

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

信息增益越大,表明用某個屬性划分數據集所帶來的”純度提升“越大。

2 樹的分裂

決策樹的學習過程如下圖所示,其中最重要的是決策樹的生長過程,即決策樹是如何分裂的,下面介紹三種常用的算法。

2.1 ID3算法

ID3算法采用信息增益作為節點分裂的依據,即選擇信息增益最大的屬性划分數據集,該次划分使用過的屬性將不再使用(不會作為后續子樹划分的依據)。
ID3算法的缺點

  • 傾向於選擇取值數量較多的屬性
  • 不能處理連續值
  • 不能處理缺失值

2.2 C4.5算法

C4.5算法是對ID3算法的改進,改進之處包括但不限於:

  • 能夠處理連續值
  • 能偶處理缺失值
  • 使用信息增益率代替信息增益,消除了ID3算法傾向於選擇取值較多的屬性作為划分屬性的缺點
  • 給出樹的剪枝策略

信息增益率

\[Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} \]

其中$$IV(a)=-\sum_{v=1}^{V} \frac{ |D^{v}| }{ |D| } log_{2}\frac{ |D^{v}| }{ |D| }$$

2.3 CART樹

CART(Classification And Regression Tree)是一棵二叉樹,它既能處理分類問題,又能夠處理回歸問題。

CART解決分類問題

對於分類問題,CART使用基尼指數(Gini index)來選擇划分屬性,基尼指數定義為:

\[Gini(D)=1-\sum_{k=1}^{K}p_{k}^{2} \]

\(Gini(D)\)反映了從數據集\(D\)中隨機抽取兩個樣本,其類別標記不一致的概率,因此\(Gini(D)\)越小,數據集\(D\)的純度越高。
為什么要引入基尼指數??
當處理分類問題時,雖然ID3或C4.5定義的熵仍然可以使用,但是由於對數函數\(\log\)的計算代價較大,CART將熵中的\(\log\)\(p=1\)處利用一階泰勒展開便是基尼指數。
屬性\(a\)的基尼指數定義為:

\[Gini\_index(D,a)=\sum_{v=1}^{V}\frac{ |D^{v}| }{ |D| }Gini(D^{v}) \]

在侯選屬性集合\(A\)中選擇那個使得划分后基尼指數最小的屬性作為最優化分屬性,即:

\[a_{*}=arg\quad min\quad Gini\_index(D,a) \]

注意
在ID3、C4.5,特征A被選取建立決策樹節點,如果它有3個類別A1,A2,A3,我們會在決策樹上建立一個三叉點,這樣決策樹是多叉樹。
CART采用的是不停的二分。會考慮把特征A分成{A1}和{A2,A3}、{A2}和{A1,A3}、{A3}和{A1,A2}三種情況,找到基尼系數最小的組合,比如{A2}和{A1,A3},然后建立二叉樹節點,一個節點是A2對應的樣本,另一個節點是{A1,A3}對應的樣本。由於這次沒有把特征A的取值完全分開,后面還有機會對子節點繼續選擇特征A划分A1和A3。這和ID3、C4.5不同,在ID3或C4.5的一顆子樹中,離散特征只會參與一次節點的建立。

CART解決回歸問題

建立CART回歸樹的步驟
輸入:訓練數據集D
輸出:回歸樹T

  1. 計算各個特征各個值划分的兩部分\(D_{1}\)\(D_{2}\)的誤差平方和,選擇誤差平方和最小的作為最右特征和最優分裂點。

\[\underset{A,a}{min}\left [ \underset{c_{1}}{min}\sum_{x_{i}\in D_{1}(A,a)}^{}(y_{i}-c_{1})^{2} + \underset{c_{2}}{min}\sum_{x_{i}\in D_{2}(A,a)}^{}(y_{i}-c_{2})^{2} \right ] \]

其中,\(c_{1}\)\(D_{1}\)的樣本輸出均值,\(c_{2}\)\(D_{2}\)樣本的輸出均值。
2. 根據最優特征A和最優切分點a,將本節點的數據集划分為兩部分\(D_{1}\)\(D_{2}\),並給出相應的輸出值

\[D_{1}(A,a)=(x,y)\in D | A(x) \leqslant a \]

\[D_{2}(A,a)=(x,y)\in D | A(x) > a \]

\[c_{1}=average(y_{i} | x_{i} \in D_{1}(A,a)) \]

\[c_{2}=average(y_{i} | x_{i} \in D_{2}(A,a)) \]

  1. 繼續對兩個子集調用1-2步驟
  2. 生成回歸樹,利用生成的CART回歸樹做預測時,用葉子節點的均值來作為預測的輸出結果。

3 決策樹節點的分裂順序

假設當前已經處理完了節點2的分裂,所有黃色節點(包括2號節點)都是當前已經存在的樹節點,那么我們接下來究竟應該選取葉節點3號、4號和5號中的哪一個節點來繼續進行決策以生成新的葉節點6號和7號?
在sklearn中提供了兩種生長模式,它們分別被稱為深度優先生長和最佳增益生長,當參數max_leaf_nodes使用默認值None時使用前者,當它被賦予某個數值時使用后者。
深度優先生長采用深度優先搜索的方法:若當前節點存在未搜索過的子節點,則當前節點跳轉到子節點進行分裂決策;若當前節點為葉節點,則調轉到上一層節點,直到根節點不存在未搜索過的子節點為止。對上圖而言,當前節點為2號,它的兩個子節點4號和5號都沒有被搜索過,因此下一步則選擇兩個節點中的一個進行跳轉。當決策樹使用最佳增益生長時,每次總是選擇會帶來最大相對信息增益的節點進行分裂,直到葉節點的最大數量達到max_left_nodes。

4 連續值和缺失值的處理

4.1 處理連續值

隨機分割法

\(s\sim U\left [ x_{min},x_{max} \right ]\),其中\(U\left [ x_{min},x_{max} \right ]\)代表特征最小值和最大值范圍上的均勻分布,將節點的樣本按照特征\(x\)中的元素是否超過\(s\)把樣本分成兩個集合,根據這兩個類別來計算樹節點分裂的信息增益。

最佳分割法

給定樣本集\(D\)和連續屬性\(a\),假定\(a\)\(D\)上出現了\(n\)個不同的取值,將這些值從小到大進行排序,記為\(\left \{ a^{1},a^{2},...,a^{n} \right \}\)。基於划分點\(t\)可將\(D\)分為子集\(D_{t}^{-}\)\(D_{t}^{+}\),其中\(D_{t}^{-}\)包含那些在屬性\(a\)上取值不大於\(t\)的樣本,而\(D_{t}^{+}\)則包含那些在屬性\(a\)上取值大於\(t\)的樣本。顯然,對於相鄰的屬性取值\(a^{i}\)\(a^{i+1}\)來說,\(t\)在區間\([a^{i},a^{i+1})\)中取任意值所產生的划分結果相同。因此,隊連續屬性\(a\),我們可考察包含\(n-1\)個元素的候選划分點集合

\[T_{a}=\left \{ \frac{a^{i}+a^{i+1}}{2} | 1\leqslant i\leq n-1 \right \} \]

我們可以像離散屬性那樣考察這些划分點,選取最優的划分點進行樣本集合的划分。

4.2 處理缺失值

C4.5算法處理缺失數據的思想非常簡單,樣本的缺失值占比越大,那么對信息增益的懲罰就越大,這是因為缺失值本身就是一種不確定性成分。設節點\(N\)的樣本缺失值比例為\(\gamma\),記非缺失值對應的類別標簽和特征分別為\(\tilde{Y}\)\(\tilde{X}\),則修正的信息增益為

\[\tilde{G}(Y,X) = (1-\gamma)G(\tilde{Y},\tilde{X}) \]

當數據完全缺失時\(\gamma=1\),信息增益為0;當數據沒有缺失值時\(\gamma=0\),信息增益與原來的值保持一致。

5 決策樹的剪枝

決策樹具有很強的擬合能力,對於任何一個沒有特征重復值的數據集,決策樹一定能夠在訓練集上做到分類錯誤率或均方回歸損失為0,因此我們應當通過一些手段來限制樹的生長,這些方法被稱為決策樹的剪枝方法。其中,預剪枝是指樹在判斷節點是否分裂的時候就預先通過一些規則來阻止其分裂,后剪枝是指在樹的節點已經全部生長完成后,通過一些規則來摘除一些子樹。

5.1 預剪枝

預剪枝是在決策樹生成過程中,對每個節點在划分前進行估計,若當前節點的划分不能帶來決策樹泛化能力的提升,則停止划分並將當前節點標記為葉節點。

5.2 后剪枝

后剪枝則是先從訓練集在生成一顆完整的決策樹,然后自底向上地對非葉節點進行考察,若將該節點對應的子樹替換為葉節點能帶來決策樹泛化能力的提升,則將該子樹替換為葉節點。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM