決策樹ID3、C4.5、CART算法:信息熵,區別,剪枝理論總結

決策樹算法中的ID3、c4.5、CART算法,記錄如下:
    決策樹算法:顧名思義,以二分類問題爲例,即利用自變量構造一顆二叉樹,將目標變量區分出來,所有決策樹算法的關鍵點如下:
    1.分裂屬性的選擇。即選擇哪個自變量作爲樹叉,也就是在n個自變量中,優先選擇哪個自變量進行分叉。而採用何種計算方式選擇樹叉,決定了決策樹算法的類型,即ID3、c4.5、CART三種決策樹算法選擇樹叉的方式是不一樣的,後文詳細描述。
    2.樹剪枝。即在構建樹叉時,由於數據中的噪聲和離羣點,許多分支反映的是訓練數據中的異常,而樹剪枝則是處理這種過分擬合的數據問題,常用的剪枝方法爲先剪枝和後剪枝。後文詳細描述。
    爲了描述方便,本文采用評價電信服務保障中的滿意度預警專題來解釋決策樹算法,即假如我家辦了電信的寬帶,有一天寬帶不能上網了,於是我打電話給電信報修,然後電信派相關人員進行維修,修好以後電信的回訪專員詢問我對這次修理障礙的過程是否滿意,我會給我對這次修理障礙給出相應評價,滿意或者不滿意。根據歷史數據可以建立滿意度預警模型,建模的目的就是爲了預測哪些用戶會給出不滿意的評價。目標變量爲二分類變量:滿意(記爲0)和不滿意(記爲1)。自變量爲根據修理障礙過程產生的數據,如障礙類型、障礙原因、修障總時長、最近一個月發生故障的次數、最近一個月不滿意次數等等。簡單的數據如下:
客戶ID    故障原因    故障類型    修障時長       滿意度
001    1    5   10.2   1
002    1    5   12   0
003    1    5    14   1
004    2     5    16  0
005    2    5   18  1
006    2    6    20   0
007    3     6   22 1
008    3    6   23   0
009    3    6   24    1
010    3    6   25    0
故障原因和故障類型都爲離散型變量,數字代表原因ID和類型ID。修障時長爲連續型變量,單位爲小時。滿意度中1爲不滿意、0爲滿意。
    下面沿着分裂屬性的選擇和樹剪枝兩條主線,去描述三種決策樹算法構造滿意度預警模型:
    分裂屬性的選擇:即該選擇故障原因、故障類型、修障時長三個變量中的哪個作爲決策樹的第一個分支。
ID3算法是採用信息增益來選擇樹叉,c4.5算法採用增益率,CART算法採用Gini指標。此外離散型變量和連續型變量在計算信息增益、增益率、Gini指標時會有些區別。詳細描述如下:
    1.ID3算法的信息增益:
     信息增益的思想來源於信息論的香農定理,ID3算法選擇具有最高信息增益的自變量作爲當前的樹叉(樹的分支),以滿意度預警模型爲例,模型有三個自變量:故障原因、故障類型、修障時長。分別計算三個自變量的信息增益,選取其中最大的信息增益作爲樹叉。信息增益=原信息需求-要按某個自變量劃分所需要的信息。
如以自變量故障原因舉例,故障原因的信息增益=原信息需求(即僅僅基於滿意度類別比例的信息需求,記爲a)-按照故障原因劃分所需要的信息需求(記爲a1)。

其中原信息需求a的計算方式爲:



其中D爲目標變量,此例中爲滿意度。m=2,即滿意和不滿意兩種情況。Pi爲滿意度中屬於分別屬於滿意和不滿意的概率。此例中共計10條數據,滿意5條,不滿意5條。概率都爲1/2。Info(滿意度)即爲僅僅基於滿意和滿意的類別比例進行劃分所需要的信息需求,計算方式爲:



按照故障原因劃分所需要的信息需求(記爲a1)可以表示爲:



其中A表示目標變量D(即滿意度)中按自變量A劃分所需要的信息,即按故障類型進行劃分所需要的信息。V表示在目標變量D(即滿意度)中,按照自變量A(此處爲故障原因)進行劃分,即故障原因分別爲1、2、3進行劃分,將目標變量分別劃分爲3個子集,{D1、D2、D3},因此V=3。即故障原因爲1的劃分中,有2個不滿意和1個滿意。D1即指2個不滿意和1個滿意。故障原因爲2的劃分中,有1個不滿意和2個滿意。D2即指1個不滿意和2個滿意。故障原因爲3的劃分中,有2個不滿意和2個滿意。D3即指2個不滿意和2個滿意。具體公式如下:


注:此處的計算結果即0.165不準確,沒有真正去算,結果僅供參考。
因此變量故障原因的信息增益Gain(故障原因)=Info(滿意度)- Info故障原因(滿意度)=1-0.165=0.835

同樣的道理,變量故障類型的信息增益計算方式如下:



                    =0.205(結果不準,爲準確計算)
變量故障類型的信息增益Gain(故障類型)=1-0.205=0.795
故障原因和故障類型兩個變量都是離散型變量,按上述方式即可求得信息增益,但修障時長爲連續型變量,對於連續型變量該怎樣計算信息增益呢?只需將連續型變量由小到大遞增排序,取相鄰兩個值的中點作爲分裂點,然後按照離散型變量計算信息增益的方法計算信息增益,取其中最大的信息增益作爲最終的分裂點。如求修障時長的信息增益,首先將修障時長遞增排序,即10.2、12、14、16、18、20、22、23、24、25,取相鄰兩個值的中點,如10.2和12,中點即爲(10.2+12)/2=11.1,同理可得其他中點,分別爲11.1、13、15、17、19、21、22.5、23.5、24.5。對每個中點都離散化成兩個子集,如中點11.1,可以離散化爲兩個<=11.1和>11.1兩個子集,然後按照離散型變量的信息增益計算方式計算其信息增益,如中點11.1的信息增益計算過程如下:



中點11.1的信息增益Gain(修障時長)=1-0.222=0.778
中點13的信息增益計算過程如下:

中點11.1的信息增益Gain(修障時長)=1-1=0
同理分別求得各個中點的信息增益,選取其中最大的信息增益作爲分裂點,如取中點11.1。然後與故障原因和故障類型的信息增益相比較,取最大的信息增益作爲第一個樹叉的分支,此例中選取了故障原因作爲第一個分叉。按照同樣的方式繼續構造樹的分支。
    總之,信息增益的直觀解釋爲選取按某個自變量劃分所需要的期望信息,該期望信息越小,劃分的純度越高。因爲對於某個分類問題而言,Info(D)都是固定的,而信息增益Gain(A)=Info(D)-InfoA(D)  影響信息增益的關鍵因素爲:-InfoA(D),即按自變量A進行劃分,所需要的期望信息越小,整體的信息增益越大,越能將分類變量區分出來。
2.C4.5算法的增益率:
    由於信息增益選擇分裂屬性的方式會傾向於選擇具有大量值的屬性(即自變量),如對於客戶ID,每個客戶ID對應一個滿意度,即按此變量劃分每個劃分都是純的(即完全的劃分,只有屬於一個類別),客戶ID的信息增益爲最大值1。但這種按該自變量的每個值進行分類的方式是沒有任何意義的。爲了克服這一弊端,有人提出了採用增益率(GainRate)來選擇分裂屬性。計算方式如下:


其中Gain(A)的計算方式與ID3算法中的信息增益計算方式相同。
以故障原因爲例:

                         =1.201
  Gain(故障原因)=0.835(前文已求得)
    GainRate故障原因(滿意度)=1.201/0.835=1.438
同理可以求得其他自變量的增益率。
選取最大的信息增益率作爲分裂屬性。
3.CART算法的Gini指標:
         CART算法選擇分裂屬性的方式是比較有意思的,首先計算不純度,然後利用不純度計算Gini指標。以滿意度預警模型爲例,計算自變量故障原因的Gini指標時,先按照故障原因可能的子集進行劃分,即可以將故障原因具體劃分爲如下的子集:{1,2,3}、{1,2}、{1,3}、{2,3}、{1}、{2}、{3}、{},共計8(2^V)個子集。由於{1,2,3}和{}對於分類來說沒有任何意義,因此實際分爲2^V-2共計6個有效子集。然後計算這6個有效子集的不純度和Gini指標,選取最小的Gini指標作爲分裂屬性。

不純度的計算方式爲:



pi表示按某個變量劃分中,目標變量不同類別的概率。

某個自變量的Gini指標的計算方式如下:



        對應到滿意度模型中,A爲自變量,即故障原因、故障類型、修障時長。D代表滿意度,D1和D2分別爲按變量A的子集所劃分出的兩個不同元組,如按子集{1,2}劃分,D1即爲故障原因屬於{1,2}的滿意度評價,共有6條數據,D2即故障原因不屬於{1,2}的滿意度評價,共有3條數據。計算子集{1,2}的不純度時,即Gini(D1),在故障原因屬於{1,2}的樣本數據中,分別有3條不滿意和3條滿意的數據,因此不純度爲1-(3/6)^2-(3/6)^2=0.5。
        以故障原因爲例,計算過程如下:


                                                          =0.5
計算子集故障原因={1,3}的子集的Gini指標時,D1和D2分別爲故障原因={1,3}的元組共計7條數據,故障原因不屬於{1,3}的元組即故障原因爲2的數據,共計3條數據。詳細計算過程如下:


=0.52

同理可以計算出故障原因的每個子集的Gini指標,按同樣的方式還可以計算故障類型和修障時長每個子集的Gini指標,選取其中最小的Gini指標作爲樹的分支。連續型變量的離散方式與信息增益中的離散方式相同。
樹的剪枝:
樹剪枝可以分爲先剪枝和後剪枝。
先剪枝:通過提前停止樹的構造,如通過決定在給定的節點不再分裂或劃分訓練元組的子集,而對樹剪枝,一旦停止,該節點即成爲樹葉。在構造樹時,可以使用諸如統計顯著性、信息增益等度量評估分裂的優劣,如果劃分一個節點的元組低於預先定義閾值的分裂,則給定子集的進一步劃分將停止。但選取一個適當的閾值是困難的,較高的閾值可能導致過分簡化的樹,而較低的閾值可能使得樹的簡化太少。
後剪枝:它由完全生長的樹剪去子樹,通過刪除節點的分支,並用樹葉替換它而剪掉給定節點的子樹,樹葉用被替換的子樹中最頻繁的類標記。

其中c4.5使用悲觀剪枝方法,CART則爲代價複雜度剪枝算法(後剪枝)。


對比總結:

一、 C&R 樹

classification and regression trees 是一種基於樹的分類和預測方法,模型使用簡單,易於理解(規則解釋起來更簡明易),該方法通過在每個步驟最大限度降低不純潔度,使用遞歸分區來將訓練記錄分割爲組。然後,可根據使用的建模方法在每個分割處自動選擇最合適的預測變量。如果節點中100% 的觀測值都屬於目標字段的一個特定類別,則該節點將被認定爲“純潔”。目標和預測變量字段可以是範圍字段,也可以是分類字段;所有分割均爲二元分割(即分割爲兩組)。分割標準用的是基尼係數(Gini Index)。

CART即分類迴歸樹。如果目標變量是離散變量,則是classfication Tree,如果目標是連續變量,則是Regression Tree。

CART樹是二叉樹。 二叉樹有什麼優點?不像多叉樹那樣形成過多的數據碎片

二、C4.5離散化的過程

   C4.5算法是構造決策樹分類器的一種算法。這種算法利用比較各個描述性屬性的信息增益值(Information Gain)的大小,來選擇Gain值最大的屬性進行分類。如果存在連續型的描述性屬性,那麼首先要把這些連續型屬性的值分成不同的區間,即“離散化”。把連續型屬性值“離散化”的方法是:
   1.尋找該連續型屬性的最小值,並把它賦值給MIN,尋找該連續型屬性的最大值,並把它賦值給MAX;

   2.設置區間【MIN,MAX】中的N個等分斷點Ai,它們分別是Ai=MIN+(MAX-MIN)/N*i,其中,i=1,2,……,N;

   3.分別計算把【MIN,Ai】和(Ai,MAX】(i=1,2,……,N)作爲區間值時的Gain值,並進行比較;

   4.選取Gain值最大的Ak作爲該連續型屬性的斷點,把屬性值設置爲【MIN,Ak】和(Ak,MAX】兩個區間值。

   CA.5算法使用信息增益的概念來構造決策樹,其中每個分類的決定都與所

擇的目標分類有關不確定性的最佳評估方法是平均信息量,即信息嫡(Entropy):

  C4.5 決策樹

優點:執行效率和內存使用改進、適用大數據集
      1)    面對數據遺漏和輸入字段很多的問題時非常穩健;
      2)    通常不需要很長的訓練次數進行估計;工作原理是基於產生最大信息增益的字段逐級分割樣本
      3)    比一些其他類型的模型易於理解,模型推出的規則有非常直觀的解釋;
      4)    允許進行多次多於兩個子組的分割。目標字段必須爲分類字段


CART與ID3的區別

通過之前的研究發現,CART與ID3算法都是基於信息論的決策樹算法,CART算法是一種通過計算Diversity(整體)-diversity(左節點)-diversity(右節點)的值取最佳分割的算法。ID3和CART算法的區別主要集中在樹的生成和樹的修剪方面,但是ID3算法只能處理離散型的描述性屬性。C4.5算法是ID3算法的後續算法,它能夠處理連續型數據。

CART中用於選擇變量的不純性度量是Gini指數;

如果目標變量是標稱的,並且是具有兩個以上的類別,則CART可能考慮將目標類別合併成兩個超類別(雙化);
       如果目標變量是連續的,則CART算法找出一組基於樹的迴歸方程來預測目標變量。


 三、  QUEST決策樹

優點:運算過程比C&R 樹更簡單有效quick unbiased efficient statistical tree (快速無偏有效的統計樹)QUEST 節點可提供用於構建決策樹的二元分類法,此方法的設計目的是減少大型 C&R 決策樹分析所需的處理時間,同時減小分類樹方法中常見的偏向類別較多預測變量的趨勢。預測變量字段可以是數字範圍的,但目標字段必須是分類的。所有分割都是二元的。

 四、CHAID決策樹

優點(chi-squared automatic interaction detection,卡方自動交互檢測),通過使用卡方統計量識別最優分割來構建決策樹的分類方法
       1)   可產生多分支的決策樹

2)   目標和預測變量字段可以是範圍字段,也可以是分類字段

3)   從統計顯著性角度確定分支變量和分割值,進而優化樹的分枝過程(前向修剪)

4)   建立在因果關係探討中,依據目標變量實現對輸入變量衆多水平劃分

 五、樹的剪枝理論

1.樹的生長及變量處理

(1)對於離散變量X(x1…xn),分別取X變量各值的不同組合,將其分到樹的左枝或右枝,並對不同組合而產生的樹,進行評判,找出最佳組合。如變量年紀,其值有“少年”、“中年”、“老年”,則分別生產{少年,中年}和{老年},{上年、老年}和{中年},{中年,老年}和{少年},這三種組合,最後評判對目標區分最佳的組合。

(2)對於連續變量X(x1…xn),首先將值排序,分別取其兩相鄰值的平均值點作爲分隔點,將樹一分成左枝和右枝,不斷掃描,進而判斷最佳分割點。

2. 變量和最佳切分點選擇原則

樹的生長,總的原則是,讓枝比樹更純,而度量原則是根據不純對指標來衡量,對於分類樹,則用GINI指標、Twoing指標、Order Twoing等;如果是迴歸樹則用,最小平方殘差、最小絕對殘差等指標衡量

(1)GINI指標(Gini越小,數據越純)——針對離散目標



(2)最小平方殘差——針對連續目標



其思想是,讓組內方差最小,對應組間方差最大,這樣兩組,也即樹分裂的左枝和右枝差異化最大。

(3)通過以上不純度指標,分別計算每個變量的各種切分/組合情況,找出該變量的最佳值組合/切分點;再比較各個變量的最佳值組合/切分點,最終找出最佳變量和該變量的最佳值組合/切分點

3. 目標值的估計

(1)分類樹:最終葉子中概率最大的類

(2)迴歸樹:最終葉子的均值或者中位數

4.樹的剪枝

(1)前剪枝( Pre-Pruning)

通過提前停止樹的構造來對決策樹進行剪枝,一旦停止該節點下樹的繼續構造,該節點就成了葉節點。一般樹的前剪枝原則有:

a.節點達到完全純度

b.樹的深度達到用戶所要的深度

c.節點中樣本個數少於用戶指定個數

d.不純度指標下降的最大幅度小於用戶指定的幅度

(2)後剪枝( Post-Pruning)

首先構造完整的決策樹,允許決策樹過度擬合訓練數據,然後對那些置信度不夠的結點的子樹用葉結點來替代。CART 採用Cost-Complexity Pruning(代價-複雜度剪枝法),代價(cost) :主要指樣本錯分率;複雜度(complexity) :主要指樹t的葉節點數,(Breiman…)定義樹t的代價複雜度(cost-complexity):



注:參數α:用於衡量代價與複雜度之間關係,表示剪枝後樹的複雜度降低程度與代價間的關係,如何定義α?  

對t來說,剪掉它的子樹s,以t中最優葉節點代替,得到新樹new_t。 new_t可能會比t對於訓練數據分錯M個,但是new_t包含的葉節點數,卻比t少:  (Leaf_s  - 1)個。令替換之後代價複雜度相等


 

5.CCP剪枝步驟:

第一步:

–  計算完全決策樹T_max的每個非葉節點的α值;

–  循環剪掉具有最小α值的子樹,直到剩下根節點

–  得到一系列剪枝(嵌套)樹{T_0,T_1,T_2,…T_m},其中T_0就是完全決策樹T_max。T_i+1是對T_i進行剪枝得到的結果

第二步:

–  使用獨立的剪枝集(非訓練集)對第一步中的T_i進行評估,獲取最佳剪枝樹

–  標準錯誤SE(standart error),公式:



–   最佳剪枝樹:T_best 是滿足以下條件並且包含的節點數最少的那顆剪枝樹。



參考文獻:

http://blog.sina.com.cn/s/blog_7399ad1f01014wec.html

http://blog.sina.com.cn/s/blog_4e4dec6c0101fdz6.html

http://blog.sina.com.cn/s/blog_5d6632e70101gh79.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章