參考資料(要是對於本文的理解不夠透徹,必須將以下博客認知閱讀,方可全面了解決策樹):
1.https://zhuanlan.zhihu.com/p/85731206
2.https://zhuanlan.zhihu.com/p/29980400
決策樹是一個非常常見並且優秀的機器學習算法,它易於理解、可解釋性強,其可作為分類算法,也可用於回歸模型。本文將分三篇介紹決策樹,第一篇介紹基本樹(包括 ID3、C4.5、CART),第二篇介紹 Random Forest、Adaboost、GBDT,第三篇介紹 Xgboost 和 LightGBM。
在進入正題之前,先讓我們了解一些有關信息論的知識!
信息論
1.信息熵
在決策樹算法中,熵是一個非常非常重要的概念。一件事發生的概率越小,我們說它所蘊含的信息量越大。比如:我們聽女人能懷孕不奇怪,如果某天聽到哪個男人懷孕了,我們就會覺得emmm…信息量很大了。
所以我們這樣衡量信息量:


其中,P(y)是事件發生的概率。信息熵就是所有可能發生的事件的信息量的期望:
表達了Y事件發生的不確定度。
決策樹屬性划分算法
眾所周知,決策樹學習的關鍵在於如何選擇最優划分屬性,一般而言,隨着划分過程不斷進行,我們希望決策樹的分支結點所包含的樣本盡可能屬於同一類別,即結點的“純度”越來越高。
1.ID3
(1)思想
從信息論的知識中我們知道:信息熵越大,從而樣本純度越低,。ID3 算法的核心思想就是以信息增益來度量特征選擇,選擇信息增益最大的特征進行分裂。算法采用自頂向下的貪婪搜索遍歷可能的決策樹空間(C4.5 也是貪婪搜索)。
(2)划分標准(詳細過程以及公式推導見西瓜書即可)
ID3算法使用信息增益為准則來選擇划分屬性,“信息熵”(information entropy)是度量樣本結合純度的常用指標,假定當前樣本集合D中第k類樣本所占比例為pk,則樣本集合D的信息熵定義為:
假定通過屬性划分樣本集D,產生了V個分支節點,v表示其中第v個分支節點,易知:分支節點包含的樣本數越多,表示該分支節點的影響力越大。故可以計算出划分后相比原始數據集D獲得的“信息增益”(information gain)。
信息增益越大,表示使用該屬性划分樣本集D的效果越好,因此ID3算法在遞歸過程中,每次選擇最大信息增益的屬性作為當前的划分屬性。
(3)缺點
- ID3 沒有剪枝策略,容易過擬合;
- 信息增益准則對可取值數目較多的特征有所偏好,類似“編號”的特征其信息增益接近於 1;
- 只能用於處理離散分布的特征;
- 沒有考慮缺失值。
2. C4.5
2.1 思想
C4.5 算法最大的特點是克服了 ID3 對特征數目的偏重這一缺點,引入信息增益率來作為分類標准。
C4.5 相對於 ID3 的缺點對應有以下改進方式:
- 引入悲觀剪枝策略進行后剪枝;
- 引入信息增益率作為划分標准;
- 可以處理連續值:將連續特征離散化,假設 n 個樣本的連續特征 A 有 m 個取值,C4.5 將其排序並取相鄰兩樣本值的平均數共 m-1 個划分點,分別計算以該划分點作為二元分類點時的信息增益,並選擇信息增益最大的點作為該連續特征的二元離散分類點;
- 可以處理缺失值:對於缺失值的處理可以分為兩個子問題:
- 問題一:在特征值缺失的情況下進行划分特征的選擇?(即如何計算特征的信息增益率)
- 問題二:選定該划分特征,對於缺失該特征值的樣本如何處理?(即到底把這個樣本划分到哪個結點里)
- 針對問題一,C4.5 的做法是:對於具有缺失值特征,用沒有缺失的樣本子集所占比重來折算;
- 針對問題二,C4.5 的做法是:將樣本同時划分到所有子節點,不過要調整樣本的權重值,其實也就是以不同概率划分到不同節點中。
2.2 划分標准
利用信息增益率可以克服信息增益的缺點,其公式為:
注意:信息增益率對可取值較少的特征有所偏好(分母越小,整體越大),因此 C4.5 並不是直接用增益率最大的特征進行划分,而是使用一個啟發式方法:先從候選划分特征中找到信息增益高於平均值的特征,再從中選擇增益率最高的。
2.3 剪枝策略(預剪枝+后剪枝)
決策樹解決過擬合的主要方法:剪枝、隨機森林
2.3.1 預剪枝
(1) 在決策樹生成過程中,對每個結點在划分前先進行估計,若當前結點的划分不能帶來決策樹泛化性能提升,則停止划分並將當前結點標記為葉結點。在構造的過程中先評估,再考慮是否分支。衡量決策樹泛化性能提升的方法:
- 節點內數據樣本低於某一閾值;
- 所有節點特征都已分裂;
- 節點划分前准確率比划分后准確率高。
(2)優缺點
- 降低過擬合風險、顯著減少決策樹的訓練時間開銷和測試時間開銷。
- 預剪枝基於“貪心”策略,有可能會帶來欠擬合風險。
2.3.2 后剪枝(C4.5采用的是基於后剪枝的悲觀剪枝方法)
(1) 后剪枝是先從訓練集生成一棵完整的決策樹,然后自底向上地對非葉子結點進行考察,若將該結點對應的子樹替換為葉結點能帶來決策樹泛化性能提升,則將該子樹替換為葉結點。
(2) 后剪枝決策樹的欠擬合風險很小,泛化性能往往優於預剪枝決策樹。但同時其訓練時間會大的多。
2.4 缺點
- 剪枝策略可以再優化;
- C4.5 用的是多叉樹,用二叉樹效率更高;
- C4.5 只能用於分類;
- C4.5 使用的熵模型擁有大量耗時的對數運算,連續值還有排序運算;
- C4.5 在構造樹的過程中,對數值屬性值需要按照其大小進行排序,從中選擇一個分割點,所以只適合於能夠駐留於內存的數據集,當訓練集大得無法在內存容納時,程序無法運行。
3. CRAT
ID3 和 C4.5 雖然在對訓練樣本集的學習中可以盡可能多地挖掘信息,但是其生成的決策樹分支、規模都比較大,CART 算法的二分法可以簡化決策樹的規模,提高生成決策樹的效率。
Cart算法的兩個主要步驟為:(1)將樣本遞歸划分進行建樹過程 ; (2)用驗證數據進行剪枝.
3.1 思想
CART 在 C4.5 的基礎上進行了很多提升。
- C4.5 為多叉樹,運算速度慢,CART 為二叉樹,運算速度快;
- C4.5 只能分類,CART 既可以分類也可以回歸;
- CART 使用 Gini 系數作為變量的不純度量,減少了大量的對數運算;
- CART 采用代理測試來估計缺失值,而 C4.5 以不同概率划分到不同節點中;
- CART 采用“基於代價復雜度剪枝”方法進行剪枝,而 C4.5 采用悲觀剪枝方法。
3.2 划分標准(Cart分類樹、Cart回歸樹)
首先我們來看看Cart分類樹!
CART決策樹(分類樹)使用“基尼指數”(Gini index)來選擇划分屬性,基尼指數反映的是從樣本集D中隨機抽取兩個樣本,其類別標記不一致的概率,因此Gini(D)越小越好,這和信息增益(率)正好相反,基尼指數定義如下:
進而,使用屬性α划分后的基尼指數為:
接下來讓我們通過一個實例,從實例中去了解如何創建一棵Cart分類樹。 如下圖所示

在上述圖中,共10條數據,屬性有3個,分別是有房情況(離散屬性且2種取值),婚姻狀況(離散屬性且有3種取值)和年收入(連續屬性),拖欠貸款者屬於分類的結果。
對於離散屬性(2種取值與多種取值)和連續屬性我們該如何進行Gini系數的計算以及划分呢?
1.首先來看有房情況這個屬性,因為該屬性只有“是”“否”兩種取值,所以其Gini系數比較容易計算,那么按照它划分后的Gini指數計算如下:

2.接下來對婚姻狀況進行計算,我們發現婚姻狀況一共有三種取值:單身、已婚、離異,又因為Cart分類樹只能是二叉樹,所以我們只能對多種取值的屬性進行組合:

3.最后對年收入屬性進行計算。年收入屬性為連續值,Cart分類樹又是如何對連續值屬性進行處理的呢?(Cart分類樹對於連續值的處理其實和C4.5算法對於連續值的處理類似,只不過Cart使用Gini指數,C4.5使用信息增益率)

將連續特征離散化,假設 n 個樣本的連續特征 A 有 m 個取值,C4.5/Cart 將其排序並取相鄰兩樣本值的平均數共 m-1 個划分點,分別計算以該划分點作為二元分類點時的信息增益/Gini系數,並選擇信息增益最大/Gini系數最小的點作為該連續特征的二元離散分類點;
通過計算我們可以發現,(單身或離異,已婚) 和 (<=97,>97)這種划分其Gini系數最小(假設我們選擇年收入)。所以根節點分裂為兩個子節點,其中一個為葉子結點。對於另外一個結點我們繼續使用上述方法在婚姻狀況、有房情況中選擇最佳特征以及最佳切分點,反復循環直到滿足條件為止。
接下來讓我們看看Cart回歸樹(最小二乘回歸樹)
眾所周知,決策樹學習的關鍵在於如何選擇最優划分屬性,然而對於Cart回歸樹而言,還有一個重要的問題就是:如何決定樹中葉節點的輸出值?
回歸樹的模型可以表示如下:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1UJTI4eCUyOSUzRCU1Q3N1bV8lN0JtJTNEMSU3RCU1RSU3Qk0lN0RjXyU3Qm0lN0RJJTI4eF8lN0JpJTdEJTVDaW4rUl8lN0JtJTdEJTI5JTVDJTVD.png)
上式中,
為對應葉子節點的輸出值,
為指示函數,當x屬於
時,值為1,否則為0。
回歸樹的建立過程,優化策略或損失函數為最小化平方誤差,即最小化下式:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNzdW1fJTdCeF8lN0JpJTdEJTVDaW4rRCU3RCUyOFQlMjh4XyU3QmklN0QlMjkteV8lN0JpJTdEJTI5JTVFJTdCMiU3RCU1QyU1Qw==.png)
(1)問題1:怎樣對輸入空間進行划分?即如何選擇划分點?
CART回歸樹的建樹過程是二分裂節點,並且保證分裂的結果符合最小化平方誤差,這里采用了比較暴力的遍歷法,即遍歷所有特征j和每個特征的多個閾值s,以平方誤差最小的組合作為分裂依據,數學描述如下:
上式中,R為以s為分割點分割的左右子樹樣本合集,c為該集合的均值。
確定了j,s后,就可以就行分裂了,將樹分裂為左右兩個區域:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1SXyU3QjElN0QlMjhqJTJDcyUyOSUzRCU1Q2xlZnQrJTVDJTdCK3hfJTdCaSU3RCU1QmolNUQlNUNsZXFzbGFudCtzKyU1Q3JpZ2h0KyU1QyU3RCUyQ1JfJTdCMiU3RCUyOGolMkNzJTI5JTNEJTVDbGVmdCslNUMlN0IreF8lN0JpJTdEJTVCaiU1RCUzRStzKyU1Q3JpZ2h0KyU1QyU3RCU1QyU1Qw==.png)
(2)問題2:如何決定樹中葉節點的輸出值?
分裂完畢以后,要確定每個葉子結點的輸出值,使用類別均值:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1jXyU3Qm0lN0QlM0QlNUNmcmFjJTdCMSU3RCU3Qk5fJTdCbSU3RCU3RCU1Q3N1bV8lN0J4XyU3QmklN0QlNUNpbit5XyU3Qm0lN0QlN0R5XyU3QmklN0QlNUMlNUM=.png)
接下來讓我們通過一個實例,從實例中去了解如何創建一棵Cart回歸樹。 如下圖所示

3.3 剪枝策略(簡略版本,具體推導見李航 統計學習方法)
采用一種“基於代價復雜度的剪枝”方法進行后剪枝,這種方法會生成一系列樹,每個樹都是通過將前面的樹的某個或某些子樹替換成一個葉節點而得到的,這一系列樹中的最后一棵樹僅含一個用來預測類別的葉節點。然后用一種成本復雜度的度量准則來判斷哪棵子樹應該被一個預測類別值的葉節點所代替。這種方法需要使用一個單獨的測試數據集來評估所有的樹,根據它們在測試數據集熵的分類性能選出最佳的樹。
3.4類別不平衡
CART 的一大優勢在於:無論訓練數據集有多失衡,它都可以將其消除不需要建模人員采取其他操作。
CART 使用了一種先驗機制,其作用相當於對類別進行加權。這種先驗機制嵌入於 CART 算法判斷分裂優劣的運算里,在 CART 默認的分類模式中,總是要計算每個節點關於根節點的類別頻率的比值,這就相當於對數據自動重加權,對類別進行均衡。
4.總結
最后通過總結的方式對比下 ID3、C4.5 和 CART 三者之間的差異。
除了之前列出來的划分標准、剪枝策略、連續值確實值處理方式等之外,我再介紹一些其他差異:
- 划分標准的差異:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺點,偏向於特征值小的特征,CART 使用基尼指數克服 C4.5 需要求 log 的巨大計算量,偏向於特征值較多的特征。
- 使用場景的差異:ID3 和 C4.5 都只能用於分類問題,CART 可以用於分類和回歸問題;ID3 和 C4.5 是多叉樹,速度較慢,CART 是二叉樹,計算速度很快;
- 樣本數據的差異:ID3 只能處理離散數據且缺失值敏感,C4.5 和 CART 可以處理連續性數據且有多種方式處理缺失值;從樣本量考慮的話,小樣本建議 C4.5、大樣本建議 CART。C4.5 處理過程中需對數據集進行多次掃描排序,處理成本耗時較高,而 CART 本身是一種大樣本的統計方法,小樣本處理下泛化誤差較大 ;
- 樣本特征的差異:ID3 和 C4.5 層級之間只使用一次特征,CART 可多次重復使用特征;
- 剪枝策略的差異:ID3 沒有剪枝策略,C4.5 是通過悲觀剪枝策略來修正樹的准確性,而 CART 是通過代價復雜度剪枝






