最常用的决策树算法(一):ID3、C4.5、CART
決策樹是一個非常常見并且優秀的機器學習算法,它易于理解、可解釋性強,其可作為分類算法,也可用于回歸模型。本文將分三篇介紹決策樹,第一篇介紹基本樹(包括 ID3、C4.5、CART),第二篇介紹 Random Forest、Adaboost、GBDT,第三篇介紹 Xgboost 和 LightGBM。
第一篇:基本樹(包括 ID3、C4.5、CART)
對于基本樹我將大致從以下四個方面介紹每一個算法:思想、劃分標準、剪枝策略,優缺點。
ID3
ID3 算法是建立在奧卡姆剃刀(用較少的東西,同樣可以做好事情)的基礎上:越是小型的決策樹越優于大的決策樹。
1.1 思想
從信息論的知識中我們知道:期望信息越小,信息熵越大,從而樣本純度越低。ID3 算法的核心思想就是以信息增益來度量特征選擇,選擇信息增益最大的特征進行分裂。算法采用自頂向下的貪婪搜索遍歷可能的決策樹空間(C4.5 也是貪婪搜索)。
其大致步驟為:
初始化特征集合和數據集合;
計算數據集合信息熵和所有特征的條件熵,選擇信息增益最大的特征作為當前決策節點;
更新數據集合和特征集合(刪除上一步使用的特征,并按照特征值來劃分不同分支的數據集合);
重復 2,3 兩步,若子集值包含單一特征,則為分支葉子節點。
1.2 劃分標準
ID3 使用的分類標準是信息增益,它表示得知特征 A 的信息而使得樣本集合不確定性減少的程度。
數據集的信息熵:
其中??表示集合 D 中屬于第 k 類樣本的樣本子集。
針對某個特征 A,對于數據集 D 的條件熵 H(D|A) 為:
其中??表示 D 中特征 A 取第 i 個值的樣本子集,?表示??中屬于第 k 類的樣本子集。
信息增益 = 信息熵 - 條件熵:
信息增益越大表示使用特征 A 來劃分所獲得的“純度提升越大”。
1.3 缺點
ID3 沒有剪枝策略,容易過擬合;
信息增益準則對可取值數目較多的特征有所偏好,類似“編號”的特征其信息增益接近于 1;
只能用于處理離散分布的特征;
沒有考慮缺失值。
C4.5
C4.5 算法最大的特點是克服了 ID3 對特征數目的偏重這一缺點,引入信息增益率來作為分類標準。
2.1 思想
C4.5 相對于 ID3 的缺點對應有以下改進方式:
引入悲觀剪枝策略進行后剪枝;
引入信息增益率作為劃分標準;
將連續特征離散化,假設 n 個樣本的連續特征 A 有 m 個取值,C4.5 將其排序并取相鄰兩樣本值的平均數共 m-1 個劃分點,分別計算以該劃分點作為二元分類點時的信息增益,并選擇信息增益最大的點作為該連續特征的二元離散分類點;
對于缺失值的處理可以分為兩個子問題:1. 在特征值缺失的情況下進行劃分特征的選擇?(即如何計算特征的信息增益率)2. 選定該劃分特征,對于缺失該特征值的樣本如何處理?(即到底把這個樣本劃分到哪個結點里)
針對問題一,C4.5 的做法是:對于具有缺失值特征,用沒有缺失的樣本子集所占比重來折算;
針對問題二,C4.5 的做法是:將樣本同時劃分到所有子節點,不過要調整樣本的權重值,其實也就是以不同概率劃分到不同節點中。
2.2 劃分標準
利用信息增益率可以克服信息增益的缺點,其公式為
?稱為特征 A 的固有值。
這里需要注意,信息增益率對可取值較少的特征有所偏好(分母越小,整體越大),因此 C4.5 并不是直接用增益率最大的特征進行劃分,而是使用一個啟發式方法:先從候選劃分特征中找到信息增益高于平均值的特征,再從中選擇增益率最高的。
2.3 剪枝策略
為什么要剪枝:過擬合的樹在泛化能力的表現非常差。
2.3.1 預剪枝
在節點劃分前來確定是否繼續增長,及早停止增長的主要方法有:
節點內數據樣本低于某一閾值;
所有節點特征都已分裂;
節點劃分前準確率比劃分后準確率高。
預剪枝不僅可以降低過擬合的風險而且還可以減少訓練時間,但另一方面它是基于“貪心”策略,會帶來欠擬合風險。
2.3.2 后剪枝
在已經生成的決策樹上進行剪枝,從而得到簡化版的剪枝決策樹。
C4.5 采用的悲觀剪枝方法,用遞歸的方式從低往上針對每一個非葉子節點,評估用一個最佳葉子節點去代替這課子樹是否有益。如果剪枝后與剪枝前相比其錯誤率是保持或者下降,則這棵子樹就可以被替換掉。C4.5 通過訓練數據集上的錯誤分類數量來估算未知樣本上的錯誤率。
后剪枝決策樹的欠擬合風險很小,泛化性能往往優于預剪枝決策樹。但同時其訓練時間會大的多。
2.4 缺點
剪枝策略可以再優化;
C4.5 用的是多叉樹,用二叉樹效率更高;
C4.5 只能用于分類;
C4.5 使用的熵模型擁有大量耗時的對數運算,連續值還有排序運算;
C4.5 在構造樹的過程中,對數值屬性值需要按照其大小進行排序,從中選擇一個分割點,所以只適合于能夠駐留于內存的數據集,當訓練集大得無法在內存容納時,程序無法運行。
CART
ID3 和 C4.5 雖然在對訓練樣本集的學習中可以盡可能多地挖掘信息,但是其生成的決策樹分支、規模都比較大,CART 算法的二分法可以簡化決策樹的規模,提高生成決策樹的效率。
3.1 思想
CART 包含的基本過程有分裂,剪枝和樹選擇。
分裂:分裂過程是一個二叉遞歸劃分過程,其輸入和預測特征既可以是連續型的也可以是離散型的,CART 沒有停止準則,會一直生長下去;
剪枝:采用代價復雜度剪枝,從最大樹開始,每次選擇訓練數據熵對整體性能貢獻最小的那個分裂節點作為下一個剪枝對象,直到只剩下根節點。CART 會產生一系列嵌套的剪枝樹,需要從中選出一顆最優的決策樹;
樹選擇:用單獨的測試集評估每棵剪枝樹的預測性能(也可以用交叉驗證)。
CART 在 C4.5 的基礎上進行了很多提升。
C4.5 為多叉樹,運算速度慢,CART 為二叉樹,運算速度快;
C4.5 只能分類,CART 既可以分類也可以回歸;
CART 使用 Gini 系數作為變量的不純度量,減少了大量的對數運算;
CART 采用代理測試來估計缺失值,而 C4.5 以不同概率劃分到不同節點中;
CART 采用“基于代價復雜度剪枝”方法進行剪枝,而 C4.5 采用悲觀剪枝方法。
3.2 劃分標準
熵模型擁有大量耗時的對數運算,基尼指數在簡化模型的同時還保留了熵模型的優點。基尼指數代表了模型的不純度,基尼系數越小,不純度越低,特征越好。這和信息增益(率)正好相反。
其中 k 代表類別。
基尼指數反映了從數據集中隨機抽取兩個樣本,其類別標記不一致的概率。因此基尼指數越小,則數據集純度越高。基尼指數偏向于特征值較多的特征,類似信息增益。基尼指數可以用來度量任何不均勻分布,是介于 0~1 之間的數,0 是完全相等,1 是完全不相等,
此外,當 CART 為二分類,其表達式為:
我們可以看到在平方運算和二分類的情況下,其運算更加簡單。當然其性能也與熵模型非常接近。
3.3 缺失值處理
上文說到,模型對于缺失值的處理會分為兩個子問題:1. 在特征值缺失的情況下進行劃分特征的選擇?2. 選定該劃分特征,對于缺失該特征值的樣本如何處理?
對于問題 1,CART 一開始嚴格要求分裂特征評估時只能使用在該特征上沒有缺失值的那部分數據,在后續版本中,CART 算法使用了一種懲罰機制來抑制提升值,從而反映出缺失值的影響(例如,如果一個特征在節點的 20% 的記錄是缺失的,那么這個特征就會減少 20% 或者其他數值)。
對于問題 2,CART 算法的機制是為樹的每個節點都找到代理分裂器,無論在訓練數據上得到的樹是否有缺失值都會這樣做。在代理分裂器中,特征的分值必須超過默認規則的性能才有資格作為代理(即代理就是代替缺失值特征作為劃分特征的特征),當 CART 樹中遇到缺失值時,這個實例劃分到左邊還是右邊是決定于其排名最高的代理,如果這個代理的值也缺失了,那么就使用排名第二的代理,以此類推,如果所有代理值都缺失,那么默認規則就是把樣本劃分到較大的那個子節點。代理分裂器可以確保無缺失訓練數據上得到的樹可以用來處理包含確實值的新數據。
3.4 剪枝策略
采用一種“基于代價復雜度的剪枝”方法進行后剪枝,這種方法會生成一系列樹,每個樹都是通過將前面的樹的某個或某些子樹替換成一個葉節點而得到的,這一系列樹中的最后一棵樹僅含一個用來預測類別的葉節點。然后用一種成本復雜度的度量準則來判斷哪棵子樹應該被一個預測類別值的葉節點所代替。這種方法需要使用一個單獨的測試數據集來評估所有的樹,根據它們在測試數據集熵的分類性能選出最佳的樹。
我們來看具體看一下代價復雜度剪枝算法:
首先我們將最大樹稱為?,我們希望減少樹的大小來防止過擬合,但又擔心去掉節點后預測誤差會增大,所以我們定義了一個損失函數來達到這兩個變量之間的平衡。損失函數定義如下:
T 為任意子樹,?為預測誤差,?為子樹 T 的葉子節點個數,?是參數,?衡量訓練數據的擬合程度,?衡量樹的復雜度,?權衡擬合程度與樹的復雜度。
那么如何找到合適的??來使得復雜度和擬合度達到最好的平衡點呢,最好的辦法就是另??從 0 取到正無窮,對于每一個固定的?,我們都可以找到使得??最小的最優子樹?。當??很小的時候,?是最優子樹;當??最大時,單獨的根節點是這樣的最優子樹。隨著??增大,我們可以得到一個這樣的子樹序列:,這里的子樹??生成是根據前一個子樹??剪掉某一個內部節點生成的。
Breiman 證明:將??從小增大,,在每個區間?中,子樹??是這個區間里最優的。
這是代價復雜度剪枝的核心思想。
我們每次剪枝都是針對某個非葉節點,其他節點不變,所以我們只需要計算該節點剪枝前和剪枝后的損失函數即可。
對于任意內部節點 t,剪枝前的狀態,有??個葉子節點,預測誤差是?;剪枝后的狀態:只有本身一個葉子節點,預測誤差是?。
因此剪枝前以 t 節點為根節點的子樹的損失函數是:
剪枝后的損失函數是
通過 Breiman 證明我們知道一定存在一個??使得?,使得這個值為;
?的意義在于,?中,子樹??是這個區間里最優的。當??大于這個值是,一定有?,也就是剪掉這個節點后都比不剪掉要更優。所以每個最優子樹對應的是一個區間,在這個區間內都是最優的。
然后我們對??中的每個內部節點 t 都計算:
?表示閾值,故我們每次都會減去最小的?。
3.5 類別不平衡
CART 的一大優勢在于:無論訓練數據集有多失衡,它都可以將其子凍消除不需要建模人員采取其他操作。
CART 使用了一種先驗機制,其作用相當于對類別進行加權。這種先驗機制嵌入于 CART 算法判斷分裂優劣的運算里,在 CART 默認的分類模式中,總是要計算每個節點關于根節點的類別頻率的比值,這就相當于對數據自動重加權,對類別進行均衡。
對于一個二分類問題,節點 node 被分成類別 1 當且僅當:
比如二分類,根節點屬于 1 類和 0 類的分別有 20 和 80 個。在子節點上有 30 個樣本,其中屬于 1 類和 0 類的分別是 10 和 20 個。如果 10/20>20/80,該節點就屬于 1 類。
通過這種計算方式就無需管理數據真實的類別分布。假設有 K 個目標類別,就可以確保根節點中每個類別的概率都是 1/K。這種默認的模式被稱為“先驗相等”。
先驗設置和加權不同之處在于先驗不影響每個節點中的各類別樣本的數量或者份額。先驗影響的是每個節點的類別賦值和樹生長過程中分裂的選擇。
3.6 回歸樹
CART(Classification and Regression Tree,分類回歸樹),從名字就可以看出其不僅可以用于分類,也可以應用于回歸。其回歸樹的建立算法上與分類樹部分相似,這里簡單介紹下不同之處。
3.6.1 連續值處理
對于連續值的處理,CART 分類樹采用基尼系數的大小來度量特征的各個劃分點。在回歸模型中,我們使用常見的和方差度量方式,對于任意劃分特征 A,對應的任意劃分點 s 兩邊劃分成的數據集??和?,求出使??和??各自集合的均方差最小,同時??和 ??的均方差之和最小所對應的特征和特征值劃分點。表達式為:
其中,?為??數據集的樣本輸出均值,?為 ??數據集的樣本輸出均值。
3.6.2 預測方式
對于決策樹建立后做預測的方式,上面講到了 CART 分類樹采用葉子節點里概率最大的類別作為當前節點的預測類別。而回歸樹輸出不是類別,它采用的是用最終葉子的均值或者中位數來預測輸出結果。
總結
最后通過總結的方式對比下 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 是通過代價復雜度剪枝。
參考
《機器學習》周志華
《數據挖掘十大算法》吳信東
CART 樹怎么進行剪枝?
附錄:決策樹算法十問及經典面試問題
決策樹是機器學習最常用的算法之一,它將算法組織成一顆樹的形式。其實這就是將平時所說的if-then語句構建成了樹的形式。這個決策樹主要包括三個部分:內部節點、葉節點和邊。內部節點是劃分的屬性,邊代表劃分的條件,葉節點表示類別。構建決策樹 就是一個遞歸的選擇內部節點,計算劃分條件的邊,最后到達葉子節點的過程。
偽代碼: 輸入: 訓練數據集D,特征集A,閾值. 輸出: 決策樹T.
如果D中所有實例屬于同一類,則置T為單結點樹,并將作為該結點的類,返回T.
如果, 則置T為單結點樹,并將D中最多的類作為該節點的類,返回T.
否則,根據相應公式計算A中各個特征對D的(信息增益、信息增益比、基尼指數等),選擇最合適的特征.
如果的得分小于,則置T為單結點樹,并將作為該結點的類,返回T.
否則,根據特征取值,對數據D進行劃分,繼續遞歸構造決策樹, 返回T.
核心公式
信息熵:
則隨機變量X的熵定義為:熵越大,隨機變量的不確定性就越大,當時,隨機變量的熵最大等于logn,故. 常見的決策樹由三種: ID3、C4.5、CART.其中,?,?,?.| ID3 | {分類:信息增益} | 多叉樹 |
| C4.5 | {分類:信息增益比} | 多叉樹 |
| CART | {分類:基尼指數} | 二叉樹 |
| CART | {回歸:平方誤差} | 二叉樹 |
算法十問
1.決策樹和條件概率分布的關系?
決策樹可以表示成給定條件下類的條件概率分布. 決策樹中的每一條路徑都對應是劃分的一個條件概率分布. 每一個葉子節點都是通過多個條件之后的劃分空間,在葉子節點中計算每個類的條件概率,必然會傾向于某一個類,即這個類的概率最大.
2.ID3和C4.5算法可以處理實數特征嗎?如果可以應該怎么處理?如果不可以請給出理由?
ID3和C4.5使用劃分節點的方法分別是信息增益和信息增益比,從這個公式中我們可以看到 這是處理類別特征的方法,實數特征能夠計算信息增益嗎?我們可以定義X是實數特征的信息增益是,.其中,則. 對于每一個實數可以使用這種方式進行分割. 除此之外,我們還可以使用特征的分桶,將實數特征映射到有限個桶中,可以直接使用ID3和C4.5算法.
3.既然信息增益可以計算,為什么C4.5還使用信息增益比?
在使用信息增益的時候,如果某個特征有很多取值,使用這個取值多的特征會的大的信息增益,這個問題是出現很多分支,將數據劃分更細,模型復雜度高,出現過擬合的機率更大。使用信息增益比就是為了解決偏向于選擇取值較多的特征的問題. 使用信息增益比對取值多的特征加上的懲罰,對這個問題進行了校正.
4.基尼指數可以表示數據不確定性,信息熵也可以表示數據的不確定性. 為什么CART使用基尼指數?
信息熵0, logK都是值越大,數據的不確定性越大. 信息熵需要計算對數,計算量大;信息熵是可以處理多個類別,基尼指數就是針對兩個類計算的,由于CART樹是一個二叉樹,每次都是選擇yes or no進行劃分,從這個角度也是應該選擇簡單的基尼指數進行計算.
5.決策樹怎么剪枝?
一般算法在構造決策樹的都是盡可能的細分,直到數據不可劃分才會到達葉子節點,停止劃分. 因為給訓練數據巨大的信任,這種形式形式很容易造成過擬合,為了防止過擬合需要進行決策樹剪枝. 一般分為預剪枝和后剪枝,預剪枝是在決策樹的構建過程中加入限制,比如控制葉子節點最少的樣本個數,提前停止. 后剪枝是在決策樹構建完成之后,根據加上正則項的結構風險最小化自下向上進行的剪枝操作. 剪枝的目的就是防止過擬合,是模型在測試數據上變現良好,更加魯棒.
6.ID3算法,為什么不選擇具有最高預測精度的屬性特征,而不是使用信息增益?
7.為什么使用貪心和其發生搜索建立決策樹,為什么不直接使用暴力搜索建立最優的決策樹?
決策樹目的是構建一個與訓練數據擬合很好,并且復雜度小的決策樹. 因為從所有可能的決策樹中直接選擇最優的決策樹是NP完全問題,在使用中一般使用啟發式方法學習相對最優的決策樹.
8.如果特征很多,決策樹中最后沒有用到的特征一定是無用嗎?
不是無用的,從兩個角度考慮,一是特征替代性,如果可以已經使用的特征A和特征B可以提點特征C,特征C可能就沒有被使用,但是如果把特征C單獨拿出來進行訓練,依然有效. 其二,決策樹的每一條路徑就是計算條件概率的條件,前面的條件如果包含了后面的條件,只是這個條件在這棵樹中是無用的,如果把這個條件拿出來也是可以幫助分析數據.
9.決策樹的優點?
優點: 決策樹模型可讀性好,具有描述性,有助于人工分析;效率高,決策樹只需要一次性構建,反復使用,每一次預測的最大計算次數不超過決策樹的深度。缺點: 對中間值的缺失敏感;可能產生過度匹配的問題,即過擬合。
10.基尼系數存在的問題?
基尼指數偏向于多值屬性;當類數較大時,基尼指數求解比較困難;基尼指數傾向于支持在兩個分區中生成大小相同的測試。
面試真題
決策樹如何防止過擬合?
信息增益比相對信息增益有什么好處?
如果由異常值或者數據分布不均勻,會對決策樹有什么影響?
手動構建CART的回歸樹的前兩個節點,給出公式每一步的公式推到?
決策樹和其他模型相比有什么優點?
決策樹的目標函數是什么?
往期精彩回顧
那些年做的學術公益-你不是一個人在戰斗
適合初學者入門人工智能的路線及資料下載
吳恩達機器學習課程筆記及資源(github標星12000+,提供百度云鏡像)
吳恩達深度學習筆記及視頻等資源(github標星8500+,提供百度云鏡像)
《統計學習方法》的python代碼實現(github標星7200+)
機器學習的數學精華(在線閱讀版)
備注:加入本站微信群或者qq群,請回復“加群”
加入知識星球(4300+用戶,ID:92416895),請回復“知識星球”
總結
以上是生活随笔為你收集整理的最常用的决策树算法(一):ID3、C4.5、CART的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最常用的决策树算法(二)Random F
- 下一篇: 经典复现:《统计学习方法》的代码实现(在