決策樹算法原理(CART分類樹)


決策樹算法原理(ID3,C4.5)

CART回歸樹 

決策樹的剪枝

 

  

  在決策樹算法原理(ID3,C4.5)中,提到C4.5的不足,比如模型是用較為復雜的熵來度量,使用了相對較為復雜的多叉樹,只能處理分類不能處理回歸。對這些問題,CART(Classification And Regression Tree)做了改進,可以處理分類,也可以處理回歸。

 

1. CART分類樹算法的最優特征選擇方法

  ID3中使用了信息增益選擇特征,增益大優先選擇。C4.5中,采用信息增益比選擇特征,減少因特征值多導致信息增益大的問題。CART分類樹算法使用基尼系數來代替信息增益比,基尼系數代表了模型的不純度,基尼系數越小,不純度越低,特征越好。這和信息增益(比)相反。

  假設K個類別,第k個類別的概率為pk概率分布的基尼系數表達式:

  如果是二分類問題,第一個樣本輸出概率為p,概率分布的基尼系數表達式為:

  對於樣本D,個數為|D|,假設K個類別,第k個類別的數量為|Ck|,則樣本D的基尼系數表達式:

  對於樣本D,個數為|D|,根據特征A的某個值a,把D分成|D1|和|D2|,則在特征A的條件下,樣本D的基尼系數表達式為:

  比較基尼系數和熵模型的表達式,二次運算比對數簡單很多。尤其是二分類問題,更加簡單。

    和熵模型的度量方式比,基尼系數對應的誤差有多大呢?對於二類分類,基尼系數和熵之半的曲線如下:

  基尼系數和熵之半的曲線非常接近,因此,基尼系數可以做為熵模型的一個近似替代。

  CART分類樹算法每次僅對某個特征的值進行二分,而不是多分,這樣CART分類樹算法建立起來的是二叉樹,而不是多叉樹。

 

2. CART分類樹算法具體流程

  CART分類樹建立算法流程,之所以加上建立,是因為CART分類樹算法有剪枝算法流程。

  算法輸入訓練集D,基尼系數的閾值,樣本個數閾值。

  輸出的是決策樹T。

  算法從根節點開始,用訓練集遞歸建立CART分類樹。

  (1)、對於當前節點的數據集為D,如果樣本個數小於閾值或沒有特征,則返回決策子樹,當前節點停止遞歸。

  (2)、計算樣本集D的基尼系數,如果基尼系數小於閾值,則返回決策樹子樹,當前節點停止遞歸。

  (3)、計算當前節點現有的各個特征的各個特征值對數據集D的基尼系數,對於離散值和連續值的處理方法和基尼系數的計算見第二節。缺失值的處理方法和C4.5算法里描述的相同。

  (4)、在計算出來的各個特征的各個特征值對數據集D的基尼系數中,選擇基尼系數最小的特征A和對應的特征值a。根據這個最優特征和最優特征值,把數據集划分成兩部分D1和D2,同時建立當前節點的左右節點,做節點的數據集D為D1,右節點的數據集D為D2。

  (5)、對左右的子節點遞歸的調用1-4步,生成決策樹。

  對生成的決策樹做預測的時候,假如測試集里的樣本A落到了某個葉子節點,而節點里有多個訓練樣本。則對於A的類別預測采用的是這個葉子節點里概率最大的類別。

 

例:根據下表所給的訓練集,應用CART算法生成決策樹。

 

 

 

 

3. CART分類樹算法對連續特征和離散特征的處理

  CART分類樹算法對連續值的處理,思想和C4.5相同,都是將連續的特征離散化。唯一區別在選擇划分點時,C4.5是信息增益比,CART是基尼系數。

  具體思路:m個樣本的連續特征A有m個,從小到大排列a1,a2,......,am,則CART取相鄰兩樣本值的平均數做划分點,一共取m-1個,其中第i個划分點Ti表示為:Ti = (ai + ai+1)/2。分別計算以這m-1個點作為二元分類點時的基尼系數選擇基尼系數最小的點為該連續特征的二元離散分類點。比如取到的基尼系數最小的點為at,則小於at的值為類別1,大於at的值為類別2,這樣就做到了連續特征的離散化。

  注意的是,與ID3、C4.5處理離散屬性不同的是,如果當前節點為連續屬性,則該屬性在后面還可以參與子節點的產生選擇過程。

  CART分類樹算法對離散值的處理,采用的思路:不停的二分離散特征。

  在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的一顆子樹中,離散特征只會參與一次節點的建立。

 

4. CART回歸樹建立算法

  CART回歸樹

  CART回歸樹和CART分類樹的建立類似,這里只說不同。

  (1)、分類樹與回歸樹的區別在樣本的輸出,如果樣本輸出是離散值,這是分類樹;樣本輸出是連續值,這是回歸樹。分類樹的輸出是樣本的類別,回歸樹的輸出是一個實數。

  (2)、連續值的處理方法不同。

  (3)、決策樹建立后做預測的方式不同

  分類模型:采用基尼系數的大小度量特征各個划分點的優劣。

  回歸模型:采用和方差度量,度量目標是對於划分特征A,對應划分點s兩邊的數據集D1和D2,求出使D1和D2各自集合的均方差最小,同時D1和D2的均方差之和最小。表達式為:

其中,c1為D1的樣本輸出均值,c2為D2的樣本輸出均值。

  對於決策樹建立后做預測的方式,CART分類樹采用葉子節點里概率最大的類別作為當前節點的預測類別。回歸樹輸出不是類別,采用葉子節點的均值或者中位數來預測輸出結果

 

5、CART樹算法的剪枝

  CART樹的生成:基於訓練數據集遞歸構建二叉決策樹。CART樹的剪枝:用驗證數據集對生成的樹進行剪枝並選擇最優子樹,損失函數最小作為剪枝的標准。

  CART分類樹的剪枝策略在度量損失的時候用基尼系數CART回歸樹的剪枝策略在度量損失的時候用均方差

  決策樹很容易對訓練集過擬合,導致泛化能力差,所以要對CART樹進行剪枝,即類似線性回歸的正則化。CART采用后剪枝法,即先生成決策樹,然后產生所有剪枝后的CART樹,然后使用交叉驗證檢驗剪枝的效果,選擇泛化能力最好的剪枝策略。

 

  剪枝損失函數表達式:

  α為正則化參數(和線性回歸的正則化一樣),C(Tt)為訓練數據的預測誤差,|Tt|是子樹T葉子節點數量

  當α = 0時,即沒有正則化,原始生成的CART樹即為最優子樹。當α = ∞時,正則化強度最大,此時由原始的生成CART樹的根節點組成的單節點樹為最優子樹。當然,這是兩種極端情況,一般來說,α越大,剪枝剪的越厲害,生成的最優子樹相比原生決策樹就越偏小。對於固定的α,一定存在使得損失函數Cα(Tt)最小的唯一子樹。

 

  剪枝的思路:

  對於位於節點t的任意一顆子樹Tt,如果沒有剪枝,損失函數是:

  如果將其剪掉,僅保留根節點,損失函數是:

  當α = 0或α很小,,當α增大到一定程度時

  當α繼續增大時不等式反向,即滿足下式:

  Tt和T有相同的損失函數,但T節點更少,因此可以對子樹Tt進行剪枝,也就是將它的子節點全部剪掉,變為一個葉子結點T。

  

  交叉驗證策略:

  如果我們把所有節點是否剪枝的值α都計算出來,然后針對不同α對應的剪枝后的最優子樹做交叉驗證。這樣可以選擇最好的α,有了這個α,用對應的最優子樹作為最終結果。

  有了上面的思路,CART樹的剪枝算法:

  輸入是CART樹建立算法得到的原始決策樹T

  輸出最優決策樹Tα

  算法過程:

  (1)、初始化αmin = ∞,最優子樹集合ω = {T}。

  (2)、從葉子結點開始自下而上計算內部節點 t 的訓練誤差損失函數Cα(Tt)(回歸樹為均方差,分類樹為基尼系數),葉子節點數|Tt|,以及正則化閾值,更新αmin = α

  (3)、得到所有節點的α值得集合M。

  (4)、從M中選擇最大的值αk,自上而下的訪問子樹 t 的內部節點,如果時,進行剪枝。並決定葉子節點 t 的值。如果是分類樹,這是概率最高的類別,如果是回歸樹,這是所有樣本輸出的均值。這樣得到αk對應的最優子樹Tk

  (5)、最優子樹集合ω = ωυTk,M = M - {αk}。

  (6)、如果M不為空,則回到步驟4。否則就已經得到了所有的可選最優子樹集合ω

  (7)、采用交叉驗證在ω選擇最優子樹Tα

 

6. CART算法小結 

 算法 支持模型 樹結構 特征選擇  連續值處理 缺失值處理    剪枝
 ID3    分類  多叉樹  信息增益  不支持  不支持  不支持
 C4.5    分類  多叉樹  信息增益比  支持  支持  支持
 CART  分類回歸  二叉樹

 基尼系數

 均方差

 支持  支持  支持

ωCART算法缺點:

(1)、無論ID3,C4.5,CART都是選擇一個最優的特征做分類決策,但大多數,分類決策不是由某一個特征決定,而是一組特征。這樣得到的決策樹更加准確,這種決策樹叫多變量決策樹(multi-variate decision tree)。在選擇最優特征的時,多變量決策樹不是選擇某一個最優特征,而是選擇一個最優的特征線性組合做決策。代表算法OC1。

(2)、樣本一點點改動,樹結構劇烈改變。這個通過集成學習里面的隨機森林之類的方法解決。

 

7. 決策樹算法小結

  這里不糾結ID3、C4.5、CART,這部分來自scikit-learn英文文檔。

優點:

  1. 簡單直觀,生成的決策樹很直觀。
  2. 基本不需要預處理,不需要提前歸一化和處理缺失值
  3. 使用決策樹預測的代價O(log2m)。m為樣本數。
  4. 可以處理離散值也可以處理連續值。很多算法只是專注於離散值或者連續值。
  5. 可以處理多維度輸出的分類問題。
  6. 相比於神經網絡之類的黑盒分類模型,決策樹在邏輯上可以很好解釋。
  7. 可以交叉驗證的剪枝來選擇模型,從而提高泛化能力
  8. 對於異常點的容錯能力好,健壯性高。

缺點:

  1. 決策樹算法非常容易過擬合,導致泛化能力不強。可以通過設置節點最少樣本數量限制決策樹深度來改進
  2. 決策樹會因為樣本發生一點的改動,導致樹結構的劇烈改變。這個可以通過集成學習之類的方法解決。 
  3. 尋找最優的決策樹是一個NP難題,我們一般是通過啟發式方法,容易陷入局部最優。可以通過集成學習的方法來改善
  4. 有些比較復雜的關系,決策樹很難學習,比如異或。這個就沒有辦法了,一般這種關系可以換神經網絡分類方法來解決
  5. 如果某些特征的樣本比例過大,生成決策樹容易偏向於這些特征。這個可以通過調節樣本權重來改善。

 


免責聲明!

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



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