決策樹算法原理(上)

此文參考了http://www.cnblogs.com/pinard/p/6050306.html 以及周志華老師的《機器學習》


決策樹算法在機器學習中算是很經典的一個算法系列了。它既可以作爲分類算法,也可以作爲迴歸算法,同時也特別適合集成學習比如隨機森林。本文就對決策樹算法原理做一個總結,上篇對ID3, C4.5的算法思想做了總結,下篇重點對CART算法做一個詳細的介紹。選擇CART做重點介紹的原因是scikit-learn使用了優化版的CART算法作爲其決策樹算法的實現。

如果對於第1部分看不明白,可以跳過,直接看下圖的手稿



1. 決策樹ID3算法的信息論基礎

    機器學習算法其實很古老,作爲一個碼農經常會不停的敲if, else if, else,其實就已經在用到決策樹的思想了。只是你有沒有想過,有這麼多條件,用哪個條件特徵先做if,哪個條件特徵後做if比較優呢?怎麼準確的定量選擇這個標準就是決策樹機器學習算法的關鍵了。1970年代,一個叫昆蘭的大牛找到了用信息論中的熵來度量決策樹的決策選擇過程,方法一出,它的簡潔和高效就引起了轟動,昆蘭把這個算法叫做ID3。下面我們就看看ID3算法是怎麼選擇特徵的。

    首先,我們需要熟悉信息論中熵的概念。熵度量了事物的不確定性,越不確定的事物,它的熵就越大。具體的,隨機變量X的熵的表達式如下:

H(X)= i=1 n p i logp i  

    其中n代表X的n種不同的離散取值。而p i  代表了X取值爲i的概率,log爲以2或者e爲底的對數。舉個例子,比如X有2個可能的取值,而這兩個取值各爲1/2時X的熵最大,此時X具有最大的不確定性。值爲H(X)=(12 log12 +12 log12 )=log2 。如果一個值概率大於1/2,另一個值概率小於1/2,則不確定性減少,對應的熵也會減少。比如一個概率1/3,一個概率2/3,則對應熵爲H(X)=(13 log13 +23 log23 )=log323 log2<log2) .

    熟悉了一個變量X的熵,很容易推廣到多個個變量的聯合熵,這裏給出兩個變量X和Y的聯合熵表達式:

H(X,Y)= i=1 n p(x i ,y i )logp(x i ,y i ) 

    有了聯合熵,又可以得到條件熵的表達式H(X|Y),條件熵類似於條件概率,它度量了我們的X在知道Y以後剩下的不確定性。表達式如下:

H(X|Y)= i=1 n p(x i ,y i )logp(x i |y i )= j=1 n p(y j )H(X|y j ) 

    好吧,繞了一大圈,終於可以重新回到ID3算法了。我們剛纔提到H(X)度量了X的不確定性,條件熵H(X|Y)度量了我們在知道Y以後X剩下的不確定性,那麼H(X)-H(X|Y)呢?從上面的描述大家可以看出,它度量了X在知道Y以後不確定性減少程度,這個度量我們在信息論中稱爲互信息,,記爲I(X,Y)。在決策樹ID3算法中叫做信息增益。ID3算法就是用信息增益來判斷當前節點應該用什麼特徵來構建決策樹。信息增益大,則越適合用來分類。

    上面一堆概念,大家估計比較暈,用下面這個圖很容易明白他們的關係。左邊的橢圓代表H(X),右邊的橢圓代表H(Y),中間重合的部分就是我們的互信息或者信息增益I(X,Y), 左邊的橢圓去掉重合部分就是H(X|Y),右邊的橢圓去掉重合部分就是H(Y|X)。兩個橢圓的並就是H(X,Y)。

2. 決策樹ID3算法的思路

    上面提到ID3算法就是用信息增益大小來判斷當前節點應該用什麼特徵來構建決策樹,用計算出的信息增益最大的特徵來建立決策樹的當前節點。這裏我們舉一個信息增益計算的具體的例子。比如我們有15個樣本D,輸出爲0或者1。其中有9個輸出爲0, 6個輸出爲1。 樣本中有個特徵A,取值爲A1,A2和A3。在取值爲A1的樣本的輸出中,有3個輸出爲1, 2個輸出爲0,取值爲A2的樣本輸出中,2個輸出爲1,3個輸出爲0, 在取值爲A3的樣本中,4個輸出爲1,1個輸出爲0.

    樣本D的熵爲: H(D)=(915 log 2 915 +615 log 2 615 )=0.971 

    樣本D在特徵下的條件熵爲: H(D|A)=515 H(D1)+515 H(D2)+515 H(D3) 

                                                      =515 (35 log 2 35 +25 log 2 25 )515 (25 log 2 25 +35 log 2 35 )515 (45 log 2 45 +15 log 2 15 )=0.888      

    對應的信息增益爲 I(D,A)=H(D)H(D|A)=0.083              

    下面我們看看具體算法過程大概是怎麼樣的。

    輸入的是m個樣本,樣本輸出集合爲D,每個樣本有n個離散特徵,特徵集合即爲A,輸出爲決策樹T。

    算法的過程爲:

    1)初始化信息增益的閾值ϵ 

    2)判斷樣本是否爲同一類輸出D i  ,如果是則返回單節點樹T。標記類別爲D i  

    3) 判斷特徵是否爲空,如果是則返回單節點樹T,標記類別爲樣本中輸出類別D實例數最多的類別。

    4)計算A中的各個特徵(一共n個)對輸出D的信息增益,選擇信息增益最大的特徵A g  

    5) 如果A g  的信息增益小於閾值ϵ ,則返回單節點樹T,標記類別爲樣本中輸出類別D實例數最多的類別。

    6)否則,按特徵A g  的不同取值A gi  將對應的樣本輸出D分成不同的類別D i  。每個類別產生一個子節點。對應特徵值爲A gi  。返回增加了節點的數T。

    7)對於所有的子節點,令D=D i ,A=A{A g } 遞歸調用2-6步,得到子樹T i  並返回。

 

3. 決策樹ID3算法的不足

    ID3算法雖然提出了新思路,但是還是有很多值得改進的地方。  

    a)ID3沒有考慮連續特徵,比如長度,密度都是連續值,無法在ID3運用。這大大限制了ID3的用途。

    b)ID3採用信息增益大的特徵優先建立決策樹的節點。很快就被人發現,在相同條件下,取值比較多的特徵比取值少的特徵信息增益大。比如一個變量有2個值,各爲1/2,另一個變量爲3個值,各爲1/3,其實他們都是完全不確定的變量,但是取3個值的比取2個值的信息增益大。如果校正這個問題呢?

    c) ID3算法對於缺失值的情況沒有做考慮

    d) 沒有考慮過擬合的問題

    ID3 算法的作者昆蘭基於上述不足,對ID3算法做了改進,這就是C4.5算法,也許你會問,爲什麼不叫ID4,ID5之類的名字呢?那是因爲決策樹太火爆,他的ID3一出來,別人二次創新,很快 就佔了ID4, ID5,所以他另闢蹊徑,取名C4.0算法,後來的進化版爲C4.5算法。下面我們就來聊下C4.5算法

4. 決策樹C4.5算法的改進

    上一節我們講到ID3算法有四個主要的不足,一是不能處理連續特徵,第二個就是用信息增益作爲標準容易偏向於取值較多的特徵,最後兩個是缺失值處理的問和過擬合問題。昆蘭在C4.5算法中改進了上述4個問題。

    對於第一個問題,不能處理連續特徵, C4.5的思路是將連續的特徵離散化。比如m個樣本的連續特徵A有m個,從小到大排列爲a 1 ,a 2 ,...,a m  ,則C4.5取相鄰兩樣本值的中位數,一共取得m-1個劃分點,其中第i個劃分點T i  爲:T i =a i +a i+1 2  。對於這m-1個點,分別計算以該點作爲二元分類點時的信息增益。選擇信息增益最大的點作爲該連續特徵的二元離散分類點。比如取到的增益最大的點爲a t  ,則小於a t  的值爲類別1,大於a t  的值爲類別2,這樣我們就做到了連續特徵的離散化。要注意的是,與離散屬性不同的是,如果當前節點爲連續屬性,則該屬性後面還可以參與子節點的產生選擇過程。

    對於第二個問題,信息增益作爲標準容易偏向於取值較多的特徵的問題。我們引入一個信息增益比的變量I R (X,Y) ,它是信息增益和特徵熵的比值。表達式如下:

I R (D,A)=I(A,D)H A (D)  

    其中D爲樣本特徵輸出的集合,A爲樣本特徵,對於特徵熵H A (D) , 表達式如下:

H A (D)= i=1 n |D i ||D| log 2 |D i ||D|  

    其中n爲特徵A的類別數, D i  爲特徵A的第i個取值對應的樣本個數。D爲樣本個數。

    特徵數越多的特徵對應的特徵熵越大,它作爲分母,可以校正信息增益容易偏向於取值較多的特徵的問題。

    對於第三個缺失值處理的問題,主要需要解決的是兩個問題,一是在樣本某些特徵缺失的情況下選擇劃分的屬性,二是選定了劃分屬性,對於在該屬性上缺失特徵的樣本的處理。

    對於第一個子問題,對於某一個有缺失特徵值的特徵A。C4.5的思路是將數據分成兩部分,對每個樣本設置一個權重(初始可以都爲1),然後劃分數據,一部分是有特徵值A的數據D1,另一部分是沒有特徵A的數據D2. 然後對於沒有缺失特徵A的數據集D1來和對應的A特徵的各個特徵值一起計算加權重後的信息增益比,最後乘上一個係數,這個係數是無特徵A缺失的樣本加權後所佔加權總樣本的比例。

    對於第二個子問題,可以將缺失特徵的樣本同時劃分入所有的子節點,不過將該樣本的權重按各個子節點樣本的數量比例來分配。比如缺失特徵A的樣本a之前權重爲1,特徵A有3個特徵值A1,A2,A3。 3個特徵值對應的無缺失A特徵的樣本個數爲2,3,4.則a同時劃分入A1,A2,A3。對應權重調節爲2/9,3/9, 4/9。

 

    對於第4個問題,C4.5引入了正則化係數進行初步的剪枝。具體方法這裏不討論。下篇講CART的時候會詳細討論剪枝的思路。

    除了上面的4點,C4.5和ID的思路區別不大。

    

5. 決策樹C4.5算法的不足與思考

    C4.5雖然改進或者改善了ID3算法的幾個主要的問題,仍然有優化的空間。

    1)由於決策樹算法非常容易過擬合,因此對於生成的決策樹必須要進行剪枝。剪枝的算法有非常多,C4.5的剪枝方法有優化的空間。思路主要是兩種,一種是預剪枝,即在生成決策樹的時候就決定是否剪枝。另一個是後剪枝,即先生成決策樹,再通過交叉驗證來剪枝。後面在下篇講CART樹的時候我們會專門講決策樹的減枝思路,主要採用的是後剪枝加上交叉驗證選擇最合適的決策樹。

    2)C4.5生成的是多叉樹,即一個父節點可以有多個節點。很多時候,在計算機中二叉樹模型會比多叉樹運算效率高。如果採用二叉樹,可以提高效率。

    3)C4.5只能用於分類,如果能將決策樹用於迴歸的話可以擴大它的使用範圍。

    4)C4.5由於使用了熵模型,裏面有大量的耗時的對數運算,如果是連續值還有大量的排序運算。如果能夠加以模型簡化可以減少運算強度但又不犧牲太多準確性的話,那就更好了。

 

    這4個問題在CART樹裏面部分加以了改進。所以目前如果不考慮集成學習話,在普通的決策樹算法裏,CART算法算是比較優的算法了。scikit-learn的決策樹使用的也是CART算法。在下篇裏我們會重點聊下CART算法的主要改進思路,上篇就到這裏。。

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