決策樹及其剪枝原理


決策樹可以分成ID3、C4.5和CART。

CART與ID3和C4.5相同都由特征選擇,樹的生成,剪枝組成。但ID3和C4.5用於分類,CART可用於分類與回歸

ID3和C4.5生成的決策樹可以是多叉的,每個節點下的叉樹由該節點特征的取值種類而定,比如特征年齡分為(青年,中年,老年),那么改節點下可分為3叉。而CART為假設決策樹為二叉樹,內部結點特征取值為”是”和”否”。

特征選擇

CART分類樹通過基尼指數選擇最優特征,同時決定該特征的最優二值切分點,而ID3和C4.5直接選擇最優特征,不用划分。

算法目的:決策樹的剪枝是為了簡化決策樹模型,避免過擬合。

剪枝類型:預剪枝、后剪枝

  • 預剪枝:在構造決策樹的同時進行剪枝。所有決策樹的構建方法,都是在無法進一步降低熵的情況下才會停止創建分支的過程,為了避免過擬合,可以設定一個閾值,熵減小的數量小於這個閾值,即使還可以繼續降低熵,也停止繼續創建分支。但是這種方法實際中的效果並不好。
  • 后剪枝是在決策樹生長完成之后,對樹進行剪枝,得到簡化版的決策樹。
    剪枝的過程是對擁有同樣父節點的一組節點進行檢查,判斷如果將其合並,熵的增加量是否小於某一閾值。如果確實小,則這一組節點可以合並一個節點,其中包含了所有可能的結果。后剪枝是目前最普遍的做法。
    后剪枝的剪枝過程是刪除一些子樹,然后用其葉子節點代替,這個葉子節點所標識的類別通過大多數原則(majority class criterion)確定。所謂大多數原則,是指剪枝過程中, 將一些子樹刪除而用葉節點代替,這個葉節點所標識的類別用這棵子樹中大多數訓練樣本所屬的類別來標識,所標識的類稱為majority class ,(majority class 在很多英文文獻中也多次出現)。

預剪枝依據:

  • 作為葉結點或作為根結點需要含的最少樣本個數
  • 決策樹的層數
  • 結點的經驗熵小於某個閾值才停止

后剪枝算法

后剪枝算法有很多種,這里簡要總結如下:

Reduced-Error Pruning (REP,錯誤率降低剪枝)

這個思路很直接,完全的決策樹不是過度擬合么,我再搞一個測試數據集來糾正它。對於完全決策樹中的每一個非葉子節點的子樹,我們嘗試着把它替換成一個葉子節點,該葉子節點的類別我們用子樹所覆蓋訓練樣本中存在最多的那個類來代替,這樣就產生了一個簡化決策樹,然后比較這兩個決策樹在測試數據集中的表現,如果簡化決策樹在測試數據集中的錯誤比較少,那么該子樹就可以替換成葉子節點。該算法以bottom-up的方式遍歷所有的子樹,直至沒有任何子樹可以替換使得測試數據集的表現得以改進時,算法就可以終止。

Pessimistic Error Pruning (PEP,悲觀剪枝)

PEP剪枝算法是在C4.5決策樹算法中提出的, 把一顆子樹(具有多個葉子節點)用一個葉子節點來替代(我研究了很多文章貌似就是用子樹的根來代替)的話,比起REP剪枝法,它不需要一個單獨的測試數據集。

CART分類回歸樹

基尼指數

分類問題,假設有K個類,樣本點屬於第k個類概率為pk,則概率分布的基尼指數定義為
這里寫圖片描述
對於二類分離,樣本點屬於第一個類的概率p,基尼指數
這里寫圖片描述
對於給定樣本集合D,基尼指數

Ck是D中屬於第k類的樣本子集,K是類的個數。
如果樣本集合D根據特征A是否取某一可能值a被分割為D1和D2兩部分。
(即在某一特征多個取值中,取其一個將其分為”是”其他為”不是”)
這里寫圖片描述
在特征A下,集合D的基尼指數定義為
這里寫圖片描述
基尼指數越大,樣本集合不確定性越大。

CART樹生成

(1) 設結點的訓練數據集為D,計算現有特征對該數據集的基尼指數.此時,對於每個特征,每次取其中一個每個可能取得值,根據樣本點對該值的測試結果為”是”或”否”將D分成2部分,並計算基尼指數.
(2) 在所有可能的特征,以及他們所有可能的切分點中,選擇基尼指數最小的特征,該選擇的特征為最優特征,該特征中的切分點為最優切分點,依照最優特征和最優切分點生成二叉樹,並把訓練數據集分配到子節點中。
(3)對兩個子節點遞歸調用 (1) (2) ,直至滿足停止條件
(4)生成CART決策樹。
停止條件是樣本個數小於預定閾值,或樣本基尼指數小於預定閾值,或沒有更多特征。

而ID3,C4.5在(1) (2)處與CART不同,ID3計算信息增益,C4.5計算信息增益比,首先求所有特征的信息增益或信息增益比,其中計算的數值是針對每一個特征,不將特征划分,而后以該特征將樹延伸,在父節點確定的條件下,繼續對子節點求所有特征的信息增益,后在划分。
CART則為求所有特征下的所有切分點后進行比較來划分。

在CART剪枝中

CART剪枝分為剪枝成子樹序列,並通過交叉驗證選取最優子樹。

1.剪枝,成子樹序列

在剪枝過程中,計算子樹的損失函數:
這里寫圖片描述
其中,T為任意子樹C(T)為對訓練數據的預測誤差(如基尼指數)|T|為子樹的節點個數,a>=0為參數,Ca(T)為參數是a時子樹T的整體損失參數a權衡訓練數據的擬合程度和模型的復雜度
從上方a不是固定的時候,則整個損失函數由預測誤差,a和模型復雜度共同決策,得出a大的時候,最優子樹Ta偏小;當a小的時候,最優子樹Ta的樹較大,a=0時整體樹最優,a->∞時,根結點組成的單節點樹最優。
且認為不同的a值,可以確定一棵不同的最優化的樹,或者說一個區間內的a值可以確定一顆最優化的樹
即將a不斷增大,利用a生成Ta這棵最優子樹
這里寫圖片描述

為了得到所有的可能生成的最優化樹{T0,T1,T2,…Tn},我們須從底向上,每次進行一次剪枝,通過得到的樹認為是最優化樹反推a
具體的,從整體樹T0開始剪枝,對於T0的任意內部結點t,結點下有若干子節點,把t下的子樹的若干葉節點稱為Tt。
剪枝后(即t下的子樹減去后,t變為葉節點)的損失函數
這里寫圖片描述
剪枝前的損失函數
這里寫圖片描述
注意這里的損失函數都是某個葉結點的損失函數,但為什么可以只求葉節點的損失函數,因為在上面的分析ID3,C4.5中得出了C(T)作為模型的預測誤差的值,通過累加每一個葉結點(即T個葉結點)的預測誤差而得出C(T)。因此單獨求某個葉結點並沒有什么問題。

現在就是求解a,a如何求解?
當a=0或充分小時,不等式

這里寫圖片描述
因為葉結點越多預測誤差應該越小。
當a不斷增大時,在某個a點有
這里寫圖片描述
當a再增大時,不等式反向。因此只要
這里寫圖片描述
Tt與t有相同的損失函數,而t結點少,因此t比Tt更可取,對Tt進行剪枝。
接下來對T0這棵整體樹中的每一個結點t,計算

這里寫圖片描述

這個g(t)表示剪枝后的整體損失函數減少程度,實際上可以看為是否剪枝的閾值,對於某個結點當他的參數a=g(t)時,剪和不剪總體損失函數時一樣的。如果a增大則不剪的整體損失函數就大於剪去的。即a大於g(t)該剪,剪后會使整體損失函數減小,而a小於g(t)則不剪,剪后會使整體損失函數增大。
這樣a緩慢增大,隨着a的增大,在一個區間內可確定一棵最優的剪枝樹

而我們求每棵樹,並認為他是最優剪枝樹。

g(t)則代表每一棵樹的a的最優區間內的最小值

即在T0中剪去g(t)最小的Tt,得到的子樹為T1,同時將最小的g(t)設為a1,那

么T1為區間[a1,a2)的最優子樹。

如此這樣下去,將所有可能的樹的情況剪枝直到根節點,在這個過程中則

會不斷增加a,產生新的區間,最后a的所有可能的g(t)取值全部確定。

2.通過交叉驗證選取最優子樹

具體的利用獨立的驗證數據集,測試子樹序列T0,T1,…Tn中各棵子樹的平

方誤差或基尼指數。平方誤差或基尼指數最小的決策數被認為是最優決策

數,因為我們每確定一棵子樹就會確定其參數a值,所以最優子樹Tk確定,對應ak也確定,即得到最優決策數Ta。

 

在使用隨機森林算法進行特征選擇時,其中一種方法叫做OOB,即袋外誤差:

 

 

 

 


免責聲明!

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



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