決策樹完整總結(ID3,C4.5,CART)

1.介紹

1.1 定義

決策樹學習的目標是根據給定的訓練數據集合構建一個決策樹模型,使它能夠對實例進行正確的分類。決策樹學習的本質是從訓練數據中歸納出一組分類規則。

決策樹學習算法流程:

  • 只適用於標稱型數據,所以需要對數據進行離散化;
  • 通常遞歸的選擇最優特徵,並根據該特徵對訓練數據進行分割,使得對各個子數據集有一個在當前條件下最好的分類。若這些子集已經能夠被基本正確分類,就將這些分到所對應的葉節點中去,若還不能夠正確分類,就對這些子集繼續選擇最優特徵,對其進行分割構建相應的結點。如此遞歸下去,直至所有訓練數據子集都被正確分類或者直到沒有合適的特徵爲止。最後每個子集都被分到葉節點上有了明確的類別,就生成了一顆決策樹。
    在這裏插入圖片描述
    決策樹學習的策略是以損失函數爲目標函數的最小化,損失函數通常是正則化的極大似然函數。當損失函數確定以後,學習問題就變爲在損失函數意義下選擇最優決策樹的問題。選擇最優決策樹是NP難問題,所以通常採用貪心的方法,自頂向下遞歸的分治方法構造,這樣的得到的決策樹是局部最優的。我們希望選擇的模型不僅應該對訓練數據能夠很好的擬合,而且對未知數據也有很好的預測(好的泛化能力),所以應該儘量避免過擬合(爲什麼是儘量減少?因爲過擬合是避免不了的,再好的模型也會有過擬合的情況的)。

1.2 決策樹與條件概率分佈

決策樹可以被認爲是if-else規則的集合,也可以認爲是定義在特徵空間與類空間上的條件概率分佈
決策樹表示給定特徵條件下類的條件概率分佈,這一條件概率分佈定義在特徵空間的一個劃分上,將特徵空間劃分爲互不相交的單元區域,並在每個單元定義一個類的概率分佈就構成了一個條件概率分佈。決策樹的一條路徑對應於劃分的一個單元。決策樹所表示的條件概率分佈由各個單元給定條件下類的條件概率分佈組成。假設XX爲所表示特徵的隨機變量,YY爲表示類的隨機變量,那麼這個條件概率分佈可以表示爲P(YX)P(Y|X)XX的取值範圍爲給定劃分下單元的集合,YY取值於類的集合。

1.3 決策樹的構建

1.3.1 劃分準則

決策樹主要分爲三種:ID3,C4.5和CART,它們分別對應的特徵選擇準則是信息增益(ID3),信息增益比(C4.5)或基尼指數(CART),即又它們決定當前選擇哪個特徵進行數據劃分,使得樣本在當下能夠被最大程度的劃分。下面將分別詳細的介紹三種算法的原理和構建過程。

1.3.2 劃分方式

  • 對於離散變量而言,選定property分類即可;對於連續變量,需要選定split_point。
  • CART和C4.5支持數據特徵爲連續分佈時的處理,能夠完成對連續屬性的離散化處理,主要通過二元切分的方式來處理連續型變量,這個分裂點的選擇原則是使得劃分後的子樹中的“混亂程度”降低;

1.3.3 停止條件

  1. 當前結點所有樣本都屬於同一類別;
  2. 當前結點的所有屬性值都相同,無法根據屬性對數據進行劃分;
  3. 達到最大樹深;
  4. 達到葉子結點的最小樣本數;

決策樹很可能會產生過擬合,防止過擬合的方法有預剪枝和後剪枝。後剪枝是對已經生成的樹自下而上進行剪枝,去掉過於細分的葉節點。預剪枝是在樹的構建過程中就進行考慮,設定一個閾值,如果當前劃分使損失函數的降低值小於該閾值,則停止劃分,從而使它具有更好的泛化能力。如果特徵數量很多,也可以在決策樹學習開始的時候進行特徵選擇,只留下對訓練數據有足夠分類能力的特徵。決策樹的生成只考慮局部最優對應於模型的局部選擇,相對地,剪枝對應於模型的全局選擇,考慮全局最優。

2. 決策樹的構建過程

2.1 ID3算法

ID3算法的核心思想應用信息增益準則作爲標準,介紹信息增益之前首先介紹一下信息熵和條件熵:

在信息論與概率統計中,是表示隨機變量不確定性的度量:

XX是一個取值爲有限個的離散隨機變量,
H(X)=i=1np(xi)logp(xi)H(X) = - \sum^{n}_{i=1} p(x_i)logp(x_i)

H(X)就被稱作隨機變量x的熵,它表示隨機變量不確定的度量,是對所有可能發生的時間產生的信息量的期望。熵取值越大,隨機變量不確定性越大。熵取值越小,數據越純。當隨機變量爲均勻分佈時,熵最大。當概率取值爲1時,熵的值爲零。
在這裏插入圖片描述
信息增益在統計學中稱爲互信息,互信息是條件概率與後驗概率的比值,化簡之後就可以得到信息增益。所以說互信息其實就是信息增益。計算方法【互信息=熵-條件熵】。

條件熵H(YX)H(Y|X)表示在已知隨機變量XX的條件下隨機變量YY的不確定性,定義爲給定XX條件下YY的條件概率分佈的熵對XX的數學期望:
H(YX)=xp(x)H(YX=x)=xp(x)yp(yx)logp(yx)H(Y|X)=\sum_xp(x)H(Y|X=x)\\ =-\sum_xp(x)\sum_yp(y|x)logp(y|x)

接下來以特徵值都爲離散值的情況下,熵與條件熵都是怎麼計算得到的:對於樣本集合DD,類別數爲K,數據集DD的經驗熵爲:
H(D)=k=1KCkDlog2CkDH(D)=-\sum^{K}_{k=1}\frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|}
其中D|D|爲樣本容量。Ck|C_k|是樣本集中屬於第k類的樣本子集。
特徵A對於數據集DD的經驗條件熵H(DA)H(D|A)
H(DA)=i=1nDiDH(Di)=i=1nDiD(k=1kDikDilog2DikDi)H(D|A)=\sum_{i=1}^{n} \frac{|D_i|}{|D|}H(D_i) = \sum_{i=1}^{n} \frac{|D_i|}{|D|}(-\sum_{k=1}^{k} \frac{|D_{ik}|}{|D_i|} log_2\frac{|D_{ik}|}{|D_i|})
其中DiD_i表示DD中特徵AA取第i個值的樣本子集,DikD_{ik}表示DiD_i中屬於第kk類的樣本子集。
而信息增益g(D,A)g(D,A)就是熵與條件熵之差:
g(D,A)=H(D)H(DA)g(D,A)=H(D)-H(D|A)

信息增益的含義
信息增益表示已知特徵XX的信息而使得類YY的信息不確定減少的程度。經驗熵H(D)H(D)表示對數據集D進行劃分的不確定性,而經驗條件熵H(DA)H(D|A)表示在給定特徵A的條件下對數據集DD進行分類後的不確定性。所以它們的差,即信息增益就表示使用特徵A對數據集D進行分類的不確定性減少的程度。信息增益越大的特徵代表其具有更強的分類能力,所以我們就要選擇能夠使數據的不確定程度減少最多的特徵,也就是信息增益最大的特徵。

從根節點開始,計算所有可能特徵的信息增益,選擇信息增益最大的特徵作爲劃分該節點的特徵,根據該特徵的不同區間建立子節點;在對子節點遞歸地調用以上方法,直到達到停止條件得到一個決策樹。ID3相當於用極大似然法進行概率模型的選擇。

2.2 C4.5算法

C4.5算法與ID3算法相似,其對ID3算法進行了改進。

以信息增益作爲劃分準則存在的問題?

信息增益偏向於選擇取值較多的特徵進行劃分。比如學號這個特徵,每個學生都有一個不同的學號,如果根據學號對樣本進行分類,則每個學生都屬於不同的類別,這樣是沒有意義的。

而C4.5在生成過程中,用信息增益比來選擇特徵,可以校正這個問題。特徵A對訓練數據集D的信息增益比定義爲其信息增益g(D,A)g(D,A)與訓練數據集DD關於特徵AA的取值熵之比,即:
gR(D,A)=g(D,A)HADg_R(D,A)=\frac{g(D,A)}{H_A{D}}
其中:
HA(D)=i=1nDiDlog2DiDH_A(D)=-\sum_{i=1}^{n}\frac{|D_i|}{|D|} log_2 \frac{|D_i|}{|D|}

其中,n是特徵A取值的個數,(當特徵A的取值越多時,特徵A的熵越大)。
特點:

  • 能夠完成對連續屬性的離散化處理;
  • 能夠對不完整數據進行處理;
  • 需要對數據集進行多次的順序掃描和排序

2.3 CART(分類和迴歸樹)

ID3和C4.5雖然在對訓練樣本集的學習中可以儘可能多的挖掘信息,但其生成的決策樹分支較大,規模較大。爲了簡化決策樹的規模,提高生成決策樹的效率,就出現了根據基尼指數來選擇的CART;
CART爲分類和迴歸數,既可以用於分類也可以用於迴歸。對迴歸樹用平方誤差最小準則,對分類樹用基尼指數最小化準則。在這裏我將主要介紹分類樹。對於給定的樣本集合DD,其基尼指數爲:
Gini(D)=1k=1K(CkD)2Gini(D)=1-\sum_{k=1}^{K}(\frac{|C_k|}{|D|})^2

Gini(D)表示集合DD中隨即變量的不確定性程度,其中CkC_kDD中屬於第kk類的樣本子集,K是類的個數。簡單的說就是從數據集中隨機選取兩個樣本,其類別標籤不一致的概率。基尼指數越小表示數據的純度越高,反之其值越大,樣本集合的不確定性也就越大,與熵類似。當CkC_k等於DD時,Gini指數等於0。
需要說明的是CART是個二叉樹,與ID3,C4.5不同。在每一次迭代中選擇基尼指數最小的特徵及其可能的二元劃分,選擇最優特徵與最優切分點進行分類,每一步將數據按照特徵A的取值切成兩份,分別進入左右子樹(其中n=2):
Gini(DA)=i=1nDiDGini(Di)Gini(D|A)=\sum_{i=1}^{n} \frac{D_i}{D}Gini(D_i)

把連續屬性轉換爲離散屬性再進行處理。雖然本質上屬性的取值是連續的,但對於有限的採樣數據它是離散的,如果有N條樣本,那麼我們有N-1種離散化的方法:<=vj的分到左子樹,>vj的分到右子樹。計算這N-1種情況下最大的信息增益率(連續屬性與離散屬性不同的是該屬性還可以作爲其後代結點的劃分屬性)。
另外,對於連續屬性先進行排序(升序),只有在決策屬性(即分類發生了變化)發生改變的地方纔需要切開,這可以顯著減少運算量。

3. 決策樹的剪枝

決策樹很容易出現過擬合現象。原因在於學習時完全考慮的是如何提高對訓練數據的正確分類,從而構建出過於複雜的決策樹。在決策樹理論中,有這樣一句話,“用較少的東西,照樣可以做很好的事情。越是小的決策樹,越優於大的決策樹”。過擬合的決策樹的錯誤率比一個經過簡化的決策樹的錯誤率要高。解決這個問題的方法稱爲剪枝,即對已生成的樹進行簡化。具體地,就是從已生成的樹熵裁剪掉一些子樹或葉節點,並將其根節點或父節點作爲新的葉節點。

  • 預剪枝(Pre-Pruning):預剪枝是根據一些原則極早的停止樹增長,如樹的深度達到用戶所要的深度、節點中樣本個數少於用戶指定個數、不純度指標下降的幅度小於用戶指定的幅度等。預剪枝的核心問題是如何事先指定樹的最大深度,如果設置的最大深度不恰當,那麼將會導致過於限制樹的生長,使決策樹的表達式規則趨於一般,不能更好地對新數據集進行分類和預測。除了事先限定決策樹的最大深度之外,還有另外一個方法來實現預剪枝操作,那就是採用檢驗技術對當前結點對應的樣本集合進行檢驗,如果該樣本集合的樣本數量已小於事先指定的最小允許值,那麼停止該結點的繼續生長,並將該結點變爲葉子結點。
  • 後剪枝:則是通過在完全生長的樹上剪去分枝實現的,通過刪除節點的分支來剪去樹節點,可以使用的後剪枝方法有多種,比如:代價複雜性剪枝、最小誤差剪枝、悲觀誤差剪枝等等。後剪枝操作是一個邊修剪邊檢驗的過程,一般規則標準是:使用測試數據,檢驗決策樹對測試數據的預測精度,並計算出相應的錯誤率,如果剪掉某個子樹後的決策樹對測試數據的預測精度或其他測度不降低,那麼剪掉該子樹。

後剪枝一般比預剪枝保留了更多的分支,一般的情況下,後剪枝決策樹的欠擬合風險很小,泛化性能往往優於預剪枝決策樹。但是後剪枝是在生成決策樹之後自底向上的對樹中所有的非葉結點進行逐一考察,因此其訓練開銷比預剪枝要大的多。
而預剪枝屬於貪心的思想,有些分支的當前劃分雖不能提升泛化性能,甚至可能導致泛化性能暫時下降,但是在其基礎上進行的後續劃分卻有可能導致性能顯著提高,給預剪枝帶來了欠擬合的風險。

Reduced-Error Pruning(REP,錯誤率降低剪枝)
該剪枝方法考慮將樹上的每個節點作爲修剪的候選對象,決定是否修剪這個結點有如下步驟組成:
1:刪除以此結點爲根的子樹;
2:使其成爲葉子結點;
3:賦予該結點關聯的訓練數據的最常見分類;
4:當修剪後的樹對於驗證集合的性能不會比原來的樹差時,才真正刪除該結點;

因爲訓練集合的過擬合,使得驗證集合數據能夠對其進行修正,反覆進行上面的操作,從底向上的處理結點,刪除那些能夠最大限度的提高驗證集合的精度的結點,直到進一步修剪有害爲止(有害是指修剪會減低驗證集合的精度)。

REP是最簡單的後剪枝方法之一,不過在數據量比較少的情況下,REP方法趨於過擬合而較少使用。這是因爲訓練數據集合中的特性在剪枝過程中被忽略,所以在驗證數據集合比訓練數據集合小的多時,要注意這個問題。儘管REP有這個缺點,不過REP仍然作爲一種基準來評價其它剪枝算法的性能。它對於兩階段決策樹學習方法的優點和缺點提供了一個很好的學習思路。由於驗證集合沒有參與決策樹的創建,所以用REP剪枝後的決策樹對於測試樣例的偏差要好很多,能夠解決一定程度的過擬合問題。

Pessimistic Error Pruning(PEP,悲觀剪枝)
不需要使用測試數據,完全使用訓練數據來生成決策樹和剪枝,對於數據量比較少的情況比較有利。
具有TT個節點的樹的誤差率衡量爲:
E(T)=tTe(t)+1/2N(t)E(T)=\sum_{t \in T} \frac{e(t)+1/2}{N(t)}
其中N(t)N(t)表示葉節點T中的樣本總數;e(t)e(t)表示節點T中誤判的樣本個數;
去掉節點K之後TT^{&#x27;}個節點的樹的誤差衡量爲(刺衡量方法側重對每個節點的衡量)。
n(t)=e(t)+1/2N(t)n(t)=\frac{e(t)+1/2}{N(t)}
可以證明:
E(T)E(T)=n(tK)n(tK)=e(tK)e(tk)N(t)E(T^{&#x27;})-E(T)=n(t^{&#x27;}_K)-n(t_K)=\frac{e(t_K^{&#x27;})-e(t_k)}{N(t)}(帶着某個點的該支的誤判個數-去掉某個點之後該支的誤判個數再除以該支的總個數)
剪枝的條件是:
SE(n(tK))=n(tK)(N(t)n(tK))N(t)E(T)E(T)=e(tK)e(tk)N(t)SE(n(t_{K^{&#x27;}}))=\sqrt{\frac{n(t_{K^{&#x27;}})*(N(t)-n(t_{K^{&#x27;}}))}{N(t)}} \leq E(T^{&#x27;})-E(T)=\frac{e(t_K^{&#x27;})-e(t_k)}{N(t)}
自頂向下逐層遍歷, ifSE(n(tK))e(tK)e(tk)N(t)if SE(n(t_{K^{&#x27;}})) \leq \frac{e(t_K^{&#x27;})-e(t_k)}{N(t)}則刪除該節點所在分支;

先計算規則在它應用的訓練樣例上的精度,然後假定此估計精度爲二項式分佈,並計算它的標準差。對於給定的置信區間,採用下界估計作爲規則性能的度量。這樣做的結果,是對於大的數據集合,該剪枝策略能夠非常接近觀察精度,隨着數據集合的減小,離觀察精度越來越遠。該剪枝方法儘管不是統計有效的,但是在實踐中有效。

PEP爲了提高對測試集合的預測可靠性,PEP對誤差估計增加了連續性校正(Continuity Correction)PEP算法是唯一使用Top-Down剪枝策略,這種策略會導致與先剪枝出現同樣的問題,將該結點的某子節點不需要被剪枝時被剪掉;另外PEP方法會有剪枝失敗的情況出現。
雖然PEP方法存在一些侷限性,但是在實際應用中表現出了較高的精度。再者其剪枝策略比其它方法相比效率更高,速度更快。因爲在剪枝過程中,樹中的每顆子樹最多需要訪問一次,在最壞的情況下,它的計算時間複雜度也只和非剪枝樹的非葉子節點數目成線性關係。

Cost-Complexity Pruning(CCP、代價複雜度)
一顆樹的好壞用如下式子衡量:
Rα(T)=R(T)+αC(T)R_\alpha (T) = R(T)+\alpha C(T)
其中R(T)R(T)代表該樹誤差的衡量,C(T)C(T)表示對樹的大小的衡量(可以用樹的終端節點個數表示)。
怎麼使用這個準則剪枝呢?

  1. 找到完整樹的子樹序列T0T1T2...Tn{T_0、T_1、T_2、...、T_n},其中Ti+1T_{i+1}是從TiT_i總產生,TnT_n爲根節點;
  2. 分別計算他們的Rα(Ti)R_{\alpha}(T_i),選擇最小的Rα(Ti)R_{\alpha}(T_i)所代表的樹;

剪枝過程特別重要,所以在最優決策樹生成過程中佔有重要地位。 有研究表明,剪枝過程的重要性要比樹生成過程更爲重要,對於不同的劃分標準生成的最大樹(Maximum Tree),在剪枝之後都能夠保留最重要的屬性劃分,差別不大。反而是剪枝方法對於最優樹的生成更爲關鍵,在數據帶有噪聲時通過剪枝甚至可以將決策樹的泛化性能提升25%.

4. 缺失值的處理

對於某些採樣數據,可能會缺少屬性值。在這種情況下,處理缺少屬性值的通常做法是賦予該屬性的常見值,或者屬性均值。

另外一種比較好的方法是爲該屬性的每個可能值賦予一個概率,即將該屬性以概率形式賦值。例如給定Boolean屬性B,已知採樣數據有12個B=0和88個B=1實例,那麼在賦值過程中,B屬性的缺失值被賦爲B(0)=0.12、B(1)=0.88;所以屬性B的缺失值以12%概率被分到False的分支,以88%概率被分到True的分支。這種處理的目的是計算信息增益,使得這種屬性值缺失的樣本也能處理。

  1. 當決定選擇哪個屬性用來進行分支時,有些訓練樣本缺失了某些屬性時該怎麼辦?
    1. 忽略這些缺失屬性a的樣本;
    2. 給缺失屬性a的樣本賦予屬性a一個均值或者最常用的值;
    3. 計算增益或者增益率時根據缺失屬性樣本個數所佔的比率對增益/增益率進行相應的“打折”;
  2. 當屬性a已經被選擇,該對樣本進行分支的時候,如果有些樣本缺失了屬性a?
    1. 忽略這些樣本;
    2. 把這些樣本的屬性a賦予一個均值或者最常出現的值,然後再對他們進行處理;
    3. 把這些屬性缺失樣本,按照具有屬性a的樣本被劃分成的子集樣本個數的相對比率,分配到各個子集中去。至於哪些缺失的樣本被劃分到子集1,哪些被劃分到子集2,這個沒有一定的準則,可以隨機而動。或者把屬性缺失樣本分配給所有的子集,也就是說每個子集都有這些屬性缺失樣本;
    4. 單獨爲屬性缺失的樣本劃分一個分支子集;
    5. 對於缺失屬性a的樣本,嘗試着根據其他屬性給他分配一個屬性a的值,然後繼續處理將其劃分到相應的子集;
  3. 當決策樹已經生成,但待分類的樣本缺失了某些屬性,這些屬性該如何處理?
    1. 如果有單獨的缺失分支,依據此分支;
    2. 把待分類的樣本的屬性a值分配一個最常出現的a的屬性值,然後進行分支預測;
    3. 根據其他屬性爲該待分類樣本填充一個屬性a值,然後進行分支處理;
    4. 在決策樹中屬性a節點的分支上,遍歷屬性a節點的所有分支,探索可能所有的分類結果,然後把這些分類結果結合起來一起考慮,按照概率決定一個分類;
    5. 待分類樣本在到達屬性a節點時就終止分類,然後根據此時a節點所覆蓋的葉子節點類別狀況爲其分配一個發生概率最高的類。

5. 優點

  • 可解釋性強;在這裏插入圖片描述
  • 算法簡單;
  • 對噪聲數據有很好的健壯性;
  • 隨機性強,適用於集成算法的基分類器:
    如 bagging方法:隨機森林
    boosting方法:Adaboost,gradient tree boosting, GBDT,Xgboost;

參考資料:分類算法-決策樹

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