文章目錄
- 一、CART樹原理
- 二、CART分類樹
-
- 2.1 特征選擇
- 2.2 建立流程
- 2.3 連續特征和離散特征的處理
- 三、CART回歸樹
- 四、CART樹算法的剪枝
-
- 4.1 剪枝的損失函數度量
- 4.2 剪枝的思路
- 4.3 CART樹的交叉驗證
- 4.4 CART樹的剪枝算法
- 五、決策樹總結
上一篇文章中,講解了ID3決策樹及C4.5決策樹,但是特們仍有許多不足:比如模型是用較為複雜的熵來度量,使用了相對較為複雜的多叉樹,隻能處理分類不能處理回歸等。對于這些問題, CART算法大部分做了改進。由于CART算法可以做回歸,也可以做分類,我們分别加以介紹,先從CART分類樹算法開始,重點比較和C4.5算法的不同點。接着介紹CART回歸樹算法,重點介紹和CART分類樹的不同點。然後我們讨論CART樹的建樹算法和剪枝算法,最後總結決策樹算法的優缺點。
一、CART樹原理
CART 全稱為 Classification And Regression Trees,即分類回歸樹。顧名思義,該算法既可以用于分類還可以用于回歸。
克服了 ID3 算法隻能處理離散型資料的缺點,CART 可以使用二進制切分來處理連續型變量。二進制切分法,即每次把資料集切分成兩份,具體地處理方法是:如果特征值大于給定值就走左子樹,否則就走右子樹。對 CART 稍作修改就可以處理回歸問題。先前我們使用香農熵來度量集合的無組織程度,如果選用其它方法來代替香農熵,就可以使用樹建構算法來完成回歸。
與ID3決策樹及C4.5決策樹一樣,CART是決策樹的一種,主要由特征選擇,樹的生成和剪枝三部分組成。它主要用來處理分類和回歸問題,下面對分别對其進行介紹。
本部分将建構兩種樹,第一種是分類樹;第二種是回歸樹。
二、CART分類樹
2.1 特征選擇
CART分類樹使用基尼指數最小化準則來選擇最佳屬性。
ID3算法使用了資訊增益來選擇特征,資訊增益大的優先選擇。C4.5算法采用了資訊增益比來選擇特征,以減少資訊增益容易選擇特征值多的特征的問題。但是無論是ID3還是C4.5,都是基于資訊論的熵模型的,這裡面會涉及大量的對數運算。是以,我們希望有一種方法簡化模型同時又不至于完全丢失熵模型的優點,這就是基尼系數。CART分類樹算法使用基尼系數來代替資訊增益比,基尼系數代表了模型的不純度,基尼系數越小,則不純度越低,特征越好。這和資訊增益(比)是相反的。
在分類問題中,假設有K個類别,第k個類别的機率為 p k p_k pk, 則基尼系數的表達式為:
G i n i ( p ) = ∑ k = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=∑k=\sum_{k=1}^{K}p_k(1−p_k)=1-\sum_{k=1}^{K}p^2_k Gini(p)=∑k=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
如果是二類分類問題,計算就更加簡單了,如果屬于第一個樣本輸出的機率是p,則基尼系數的表達式為:
G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1−p) Gini(p)=2p(1−p)
對于個給定的樣本D,假設有K個類别, 第k個類别的數量為 C k C_k Ck,則樣本D的基尼系數表達式為:
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^{K}(\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
特别的,對于樣本D,如果根據特征A的某個值a,把D分成D1和D2兩部分,則在特征A的條件下,D的基尼系數表達式為:
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
其中:
- Gini(D):表示集合D的不确定性。
- Gini(A,D):表示經過A=a分割後的集合D的不确定性。
對比基尼系數表達式和熵模型的表達式,二次運算要比對數簡單很多,尤其是二類分類的計算,更加簡單。但是簡單歸簡單,和熵模型的度量方式比,基尼系數對應的誤差有多大呢?對于二類分類,基尼系數和熵之半的曲線如下:
從上圖可以看出,基尼系數和熵之半的曲線非常接近,僅僅在45度角附近誤差稍大。是以,基尼系數可以做為熵模型的一個近似替代。而CART分類樹算法就是使用的基尼系數來選擇決策樹的特征。同時,為了進一步簡化,CART分類樹算法每次僅僅對某個特征的值進行二分,而不是多分,這樣CART分類樹算法建立起來的是二叉樹,而不是多叉樹。這樣一可以進一步簡化基尼系數的計算,二可以建立一個更加優雅的二叉樹模型。
2.2 建立流程
算法從根節點開始,用訓練集遞歸的建立CART樹。
- 1)對于目前節點的資料集為D,如果樣本個數小于門檻值或者沒有特征,則傳回決策子樹,目前節點停止遞歸。
- 2)計算樣本集D的基尼系數,如果基尼系數小于門檻值,則傳回決策樹子樹,目前節點停止遞歸。
- 3)計算目前節點現有的各個特征的各個特征值對資料集D的基尼系數。
- 4)在計算出來的各個特征的各個特征值對資料集D的基尼系數中,選擇基尼系數最小的特征A和對應的特征值a。根據這個最優特征和最優特征值,把資料集劃分成兩部分D1和D2,同時建立目前節點的左右節點,做節點的資料集D為D1,右節點的資料集D為D2.
- 5)對左右的子節點遞歸的調用1-4步,生成決策樹。
對于生成的決策樹做預測的時候,假如測試集裡的樣本A落到了某個葉子節點,而節點裡有多個訓練樣本。則對于A的類别預測采用的是這個葉子節點裡機率最大的類别。
2.3 連續特征和離散特征的處理
1)、連續特征的處理
對于CART分類樹連續值的處理問題,其思想和C4.5是相同的,都是将連續的特征離散化。唯一的差別在于在選擇劃分點時的度量方式不同,C4.5使用的是資訊增益比,則CART分類樹使用的是基尼系數。
具體的思路如下,比如m個樣本的連續特征A有m個,從小到大排列為 a 1 , a 2 , . . . , a m a_1,a_2,...,a_m a1,a2,...,am,則CART算法取相鄰兩樣本值的平均數,一共取得m-1個劃分點,其中第i個劃分點 T i T_i Ti表示為: T i = a i + a ( i + 1 ) 2 Ti=\frac{a_i+a_{(i+1)}}{2} Ti=2ai+a(i+1)。對于這m-1個點,分别計算以該點作為二進制分類點時的基尼系數。選擇基尼系數最小的點作為該連續特征的二進制離散分類點。比如取到的基尼系數最小的點為 a t a_t at,則小于 a t a_t at的值為類别1,大于 a t a_t at的值為類别2,這樣我們就做到了連續特征的離散化。要注意的是,與ID3或者C4.5處理離散屬性不同的是,如果目前節點為連續屬性,則該屬性後面還可以參與子節點的産生選擇過程。
2)、離散特征處理
對于CART分類樹離散值的處理問題,采用的思路是不停的二分離散特征。
在ID3或者C4.5,如果某個特征A被選取建立決策樹節點,如果它有A1,A2,A3三種類别,我們會在決策樹上一下建立一個三叉的節點。這樣導緻決策樹是多叉樹。但是CART分類樹使用的方法不同,他采用的是不停的二分,還是這個例子,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 = { ( X 1 , y 1 ) , ( X 2 , y 2 ) , … , ( X n , y n ) } D=\{(X_1,y_1),(X_2,y_2),…,(X_n,y_n)\} D={(X1,y1),(X2,y2),…,(Xn,yn)}。我們知道決策樹最終将資料元組劃分到了多個葉子節點中,比如分類樹的每個葉子就有一個類标号,作為元組的預測類。回歸樹的思路類似,我将資料空間劃分成了mm個區域 { R 1 , R 2 , … , R m } \{R_1,R_2,…,R_m\} {R1,R2,…,Rm},實際上就是将訓練元組的分區。然後賦給每個區域有一個固定的代表值 C i C_i Ci(類似于分類樹中的類标号),這樣,回歸樹的模型可以表示成r如下公式的形式:
f ( X ) = ∑ i = 1 m C i I ( X ∈ R i ) f(X)=\sum_{i=1}^{m}C_iI(X \in R_i) f(X)=i=1∑mCiI(X∈Ri)
其中 I ( X ∈ R i ) = 1 I(X∈R_i)=1 I(X∈Ri)=1,如果 X ∈ R i X∈R_i X∈Ri;否則, I ( X ∈ R i ) = 0 I(X∈R_i)=0 I(X∈Ri)=0。這麼看來,上式的含義是:先判斷X屬于哪個區域,然後傳回這個區域的代表值。
這樣,我們可以寫出對于某個區域Ri回歸模型的損失函數:
J ( C ) = ∑ X j ∈ R i ( f ( X j ) − g i ) 2 J(C)=\sum_{X_j \in R_i}(f(X_j)-g_i)^2 J(C)=Xj∈Ri∑(f(Xj)−gi)2
其中, g i g_i gi為這個區域的代表值(這裡用 g i g_i gi而不用 C i C_i Ci的原因是我要表達 g i g_i gi是分裂中間的某個區域的代表值,而 C i C_i Ci為最終完成分裂之後的葉子節點的代表值), g i g_i gi的計算方法一般是這個區域中的元組的y值的均值(取均值時,損失函數達到最優)。
g i = 1 N i ∑ X j ∈ R i y i g_i=\frac{1}{N_i}\sum_{X_j \in R_i}y_i gi=Ni1Xj∈Ri∑yi
其中, N i N_i Ni為這個區域内資料元組的總數。初始時,所有的資料元組都在一個區域内,我們按照 J ( C ) J(C) J(C)計算損失函數,如果計算得到的誤內插補點太大,不能滿足要求,則尋找最佳的分裂準則(屬性)和分裂值将資料集一分為二。這裡的關鍵在于怎樣的分裂準則和分裂值對于回歸樹來說是最佳的。其實很明顯,“最佳”指我按照這樣的屬性和屬性值将資料集一分為二後,使得分裂得到的兩個子區域的誤差和最小。
綜上所述,回歸樹的計算步驟如下:
- 1)初始時,将所有訓練元組放置于根節點中,計算損失函數得到誤內插補點,倘若誤差大于事先定好的參數,那麼執行下面的2~4步;
-
2)選擇用于分裂區域的屬性A和對應的屬性值s,将目前節點的資料元組劃分到以下兩個區域 R 1 R_1 R1, R 2 R_2 R2中。:
R 1 = { X ∣ x i ≤ s } ; R 1 = { X ∣ x i > s } R_1=\{X|x_i\leq s\};R_1=\{X|x_i>s\} R1={X∣xi≤s};R1={X∣xi>s}
其中 x i x_i xi為元組 X X X中屬性 A A A的值。而選擇分裂屬性 A A A以及屬性值 s s s的依據是使得分裂後的子區域誤內插補點的和最小。即:
m i n ∑ X j ∈ R 1 ( f ( X j ) − y 1 ) 2 + ∑ X j ∈ R 2 ( f ( X j ) − y 2 ) 2 min\sum_{X_j \in R_1}(f(X_j)-y_1)^2+\sum_{X_j \in R_2}(f(X_j)-y_2)^2 minXj∈R1∑(f(Xj)−y1)2+Xj∈R2∑(f(Xj)−y2)2
這一步具體執行的時候,我們周遊所有的屬性以及每個屬性的所有可能的劃分值,分别計算他們劃分資料元組之後的兩個子區域的代表值 y 1 , y 2 y_1,y_2 y1,y2,這樣就可以計算 R 1 , R 2 R_1,R_2 R1,R2的誤差和上式,最終選擇誤差和最小的屬性 A A A和屬性值 s s s,作為分裂依據。
四、CART樹算法的剪枝
CART回歸樹和CART分類樹的剪枝政策除了在度量損失的時候一個使用均方差,一個使用基尼系數,算法基本完全一樣,這裡我們一起來講。
由于決策時算法很容易對訓練集過拟合,而導緻泛化能力差,為了解決這個問題,我們需要對CART樹進行剪枝,即類似于線性回歸的正則化,來增加決策樹的泛化能力。但是,有很多的剪枝方法,我們應該這麼選擇呢?CART采用的辦法是後剪枝法,即先生成決策樹,然後産生所有可能的剪枝後的CART樹,然後使用交叉驗證來檢驗各種剪枝的效果,選擇泛化能力最好的剪枝政策。
也就是說,CART樹的剪枝算法可以概括為兩步,第一步是從原始決策樹生成各種剪枝效果的決策樹,第二步是用交叉驗證來檢驗剪枝後的預測能力,選擇泛化預測能力最好的剪枝後的數作為最終的CART樹。
4.1 剪枝的損失函數度量
首先我們看看剪枝的損失函數度量,在剪枝的過程中,對于任意的一刻子樹T,其損失函數為:
C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_{\alpha}(T_t)=C(T_t)+\alpha|T_t| Cα(Tt)=C(Tt)+α∣Tt∣
其中, α α α為正則化參數,這和線性回歸的正則化一樣。 C ( T t ) C(T_t) C(Tt)為訓練資料的預測誤差,分類樹是用基尼系數度量,回歸樹是均方差度量。 ∣ T t ∣ |T_t| ∣Tt∣是子樹T的葉子節點的數量。
當 α = 0 α=0 α=0時,即沒有正則化,原始的生成的CART樹即為最優子樹。當 α = ∞ α=∞ α=∞時,即正則化強度達到最大,此時由原始的生成的CART樹的根節點組成的單節點樹為最優子樹。當然,這是兩種極端情況。一般來說, α α α越大,則剪枝剪的越厲害,生成的最優子樹相比原生決策樹就越偏小。對于固定的 α α α,一定存在使損失函數 C α ( T ) C_α(T) Cα(T)最小的唯一子樹。
4.2 剪枝的思路
對于位于節點t的任意一顆子樹Tt,如果沒有剪枝,它的損失是:
C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_{\alpha}(T_t)=C(T_t)+\alpha|T_t| Cα(Tt)=C(Tt)+α∣Tt∣
如果将其剪掉,僅僅保留根節點,則損失是:
C α ( T ) = C ( T ) + α C_{\alpha}(T)=C(T)+\alpha Cα(T)=C(T)+α
當 α = 0 α=0 α=0或者 α α α很小時, C α ( T t ) < C α ( T ) C_α(T_t)<C_α(T) Cα(Tt)<Cα(T) , 當 α α α增大到一定的程度時:
C α ( T t ) = C α ( T ) C_{\alpha}(T_t)=C_{\alpha}(T) Cα(Tt)=Cα(T)
當α繼續增大時不等式反向,也就是說,如果滿足下式:
α = C ( T ) − C ( T t ) ∣ T t ∣ − 1 \alpha=\frac{C(T)-C(T_t)}{|T_t|-1} α=∣Tt∣−1C(T)−C(Tt)
T t T_t Tt 和 T T T有相同的損失函數,但是 T T T節點更少,是以可以對子樹 T t T_t Tt進行剪枝,也就是将它的子節點全部剪掉,變為一個葉子節點T。
4.3 CART樹的交叉驗證
由上面可知:可以計算出每個子樹是否剪枝的門檻值α,如果我們把所有的節點是否剪枝的值α都計算出來,然後分别針對不同的α所對應的剪枝後的最優子樹做交叉驗證。這樣就可以選擇一個最好的α,有了這個α,我們就可以用對應的最優子樹作為最終結果。
4.4 CART樹的剪枝算法
- 輸入:CART樹建立算法得到的原始決策樹T。
- 輸出:最優決策子樹Tα。
算法如下:
- 1)初始化 α m i n = ∞ α_{min}=∞ αmin=∞, 最優子樹集合 ω = { T } ω=\{T\} ω={T};
- 2)從葉子節點開始自下而上計算各内部節點t的訓練誤差損失函數 C α ( T t ) C_α(T_t) Cα(Tt)(回歸樹為均方差,分類樹為基尼系數),葉子節點數 ∣ T t ∣ |T_t| ∣Tt∣,以及正則化門檻值 α = m i n { C ( T ) − C ( T t ) ∣ T t ∣ − 1 , α m i n } α=min\{\frac{C(T)−C(T_t)}{|T_t|−1},α_{min}\} α=min{∣Tt∣−1C(T)−C(Tt),αmin},更新 α m i n = α α_{min}=α αmin=α;
- 3)得到所有節點的 α α α值的集合 M M M;
- 4)從M中選擇最大的值 α k α_k αk,自上而下的通路子樹 t t t的内部節點,如果 C ( T ) − C ( T t ) ∣ T t ∣ − 1 \frac{C(T)−C(T_t)}{|T_t|−1} ∣Tt∣−1C(T)−C(Tt)時,進行剪枝。并決定葉節點 t t t的值。如果是分類樹,則是機率最高的類别,如果是回歸樹,則是所有樣本輸出的均值。這樣得到αk對應的最優子樹Tk;
- 5)最優子樹集合 ω = ω ∪ T k ω=ω∪T_k ω=ω∪Tk, M = M − α k M=M−{α_k} M=M−αk;
- 6)如果M不為空,則回到步驟4。否則就已經得到了所有的可選最優子樹集合ω;
- 7)采用交叉驗證在ω選擇最優子樹 T α T_α Tα。
五、決策樹總結
決策樹優點:
- 1)簡單直覺,生成的決策樹很直覺。
- 2)基本不需要預處理,不需要提前歸一化,處理缺失值。
- 3)使用決策樹預測的代價是O(log2m)。 m為樣本數。
- 4)既可以處理離散值也可以處理連續值。很多算法隻是專注于離散值或者連續值。
- 5)可以處理多元度輸出的分類問題。
- 6)相比于神經網絡之類的黑盒分類模型,決策樹在邏輯上可以得到很好的解釋
- 7)可以交叉驗證的剪枝來選擇模型,進而提高泛化能力。
- 8) 對于異常點的容錯能力好,健壯性高。
決策樹缺點:
- 1)決策樹算法非常容易過拟合,導緻泛化能力不強。可以通過設定節點最少樣本數量和限制決策樹深度來改進。
- 2)決策樹會因為樣本發生一點點的改動,就會導緻樹結構的劇烈改變。這個可以通過內建學習之類的方法解決。
- 3)尋找最優的決策樹是一個NP難的問題,我們一般是通過啟發式方法,容易陷入局部最優。可以通過內建學習之類的方法來改善。
- 4)有些比較複雜的關系,決策樹很難學習,比如異或。這個就沒有辦法了,一般這種關系可以換神經網絡分類方法來解決。
- 5)如果某些特征的樣本比例過大,生成決策樹容易偏向于這些特征。這個可以通過調節樣本權重來改善。
文章有很多直接複制了決策樹算法原理(下)中的總結,因為該文章寫的太全了。