決策樹算法學習筆記

決策樹算法:顧名思義,以二分類問題爲例,即利用自變量構造一顆二叉樹,將目標變量區分出來,所有決策樹算法的關鍵點如下:

    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則爲代價複雜度剪枝算法(後剪枝)。

說明: 在決策樹構造過程中可能會出現這種情況:所有屬性都作爲分裂屬性用光了,但有的子集還不是純淨集,即集合內的元素不屬於同一類別。在這種情況下,由於沒有更多信息可以使用了,一般對這些子集進行“多數表決”,即使用此子集中出現次數最多的類別作爲此節點類別,然後將此節點作爲葉子節點

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