轉載於:http://www.cnblogs.com/pinard/p/6050306.html (樓主總結的很好,就拿來主義了,不顧以后還是多像樓主學習)
決策樹算法在機器學習中算是很經典的一個算法系列了。它既可以作為分類算法,也可以作為回歸算法,同時也特別適合集成學習比如隨機森林。本文就對決策樹算法原理做一個總結,上篇對ID3, C4.5的算法思想做了總結,下篇重點對CART算法做一個詳細的介紹。決策樹根據一步步地屬性分類可以將整個特征空間進行划分,從而區別出不同的分類樣本
1. 決策樹ID3算法的信息論基礎
機器學習算法其實很古老,作為一個碼農經常會不停的敲if, else if, else,其實就已經在用到決策樹的思想了。只是你有沒有想過,有這么多條件,用哪個條件特征先做if,哪個條件特征后做if比較優呢?怎么准確的定量選擇這個標准就是決策樹機器學習算法的關鍵了。1970年代,一個叫昆蘭的大牛找到了用信息論中的熵來度量決策樹的決策選擇過程,方法一出,它的簡潔和高效就引起了轟動,昆蘭把這個算法叫做ID3。下面我們就看看ID3算法是怎么選擇特征的。
首先,我們需要熟悉信息論中熵的概念。熵度量了事物的不確定性,越不確定的事物,它的熵就越大。具體的,隨機變量X的熵的表達式如下:
其中n代表X的n種不同的離散取值。而pipi代表了X取值為i的概率,log為以2或者e為底的對數。舉個例子,比如X有2個可能的取值,而這兩個取值各為1/2時X的熵最大,此時X具有最大的不確定性。值為H(X)=−(12log12+12log12)=log2H(X)=−(12log12+12log12)=log2。如果一個值概率大於1/2,另一個值概率小於1/2,則不確定性減少,對應的熵也會減少。比如一個概率1/3,一個概率2/3,則對應熵為H(X)=−(13log13+23log23)=log3−23log2<log2)H(X)=−(13log13+23log23)=log3−23log2<log2).
熟悉了一個變量X的熵,很容易推廣到多個個變量的聯合熵,這里給出兩個變量X和Y的聯合熵表達式:
有了聯合熵,又可以得到條件熵的表達式H(X|Y),條件熵類似於條件概率,它度量了我們的X在知道Y以后剩下的不確定性。表達式如下:
好吧,繞了一大圈,終於可以重新回到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)。
信息熵(Entropy)、信息增益(Information Gain)概念解釋
1、 信息熵:H(X) 描述X攜帶的信息量。 信息量越大(值變化越多),則越不確定,越不容易被預測。
對於拋硬幣問題,每次有2種情況,信息熵為1
對於投骰子問題,每次有6中情況,信息熵為1.75
下面為公式:
其中log2(p)可以理解為p這個需要用幾個bit位表示。如p(x1)=1/2, p(x2)=1/4, p(x3)=1/8, p(x4)=1/8,
可以用x1: 1, x2: 10, x3: 110, x4: 111表示,因為為了讓平均的bit位最少,概率越大的bit為設的越短。而-log2(p)正好對應bit位數。
那么H(X)可以理解為比特位的期望值。
信息熵特點:(以概率和為1為前提哈)
a) 不同類別的概率分布越均勻,信息熵越大;
b) 類別個數越多,信息熵越大;
c) 信息熵越大,越不容易被預測;(變化個數多,變化之間區分小,則越不容易被預測)(對於確定性問題,信息熵為0;p=1; E=p*logp=0)
2、 信息增益IG(Y|X): 衡量一個屬性(x)區分樣本(y)的能力。 當新增一個屬性(x)時,信息熵H(Y)的變化大小即為信息增益。 IG(Y|X)越大表示x越重要。
條件熵:H(Y|X),當X條件下Y的信息熵
信息增益: IG(Y|X)=H(Y)-H(Y|X)
熵(entropy):在信息論和概率統計中,熵是表示隨機變量不確定性的度量
條件熵(conditional entropy):表示在一直隨機變量X的條件下隨機變量Y的不確定性度量。
信息增益(information gain):信息增益表示得知特征X的信息而使得類Y的信息的不確定性減少的程度。
信息增益比(information gain ratio):其信息增益g(D, A)與訓練數據集D關於特征A的值的熵HA(D)之比
基尼指數(gini index):基尼指數Gini(D)表示集合D的不確定性,基尼指數越大,樣本集合的不確定性也就越大,這一點與熵相似。
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)=−(915log2915+615log2615)=0.971H(D)=−(915log2915+615log2615)=0.971
樣本D在特征下的條件熵為: H(D|A)=515H(D1)+515H(D2)+515H(D3)H(D|A)=515H(D1)+515H(D2)+515H(D3)
=−515(35log235+25log225)−515(25log225+35log235)−515(45log245+15log215)=0.888=−515(35log235+25log225)−515(25log225+35log235)−515(45log245+15log215)=0.888
對應的信息增益為 I(D,A)=H(D)−H(D|A)=0.083I(D,A)=H(D)−H(D|A)=0.083
下面我們看看具體算法過程大概是怎么樣的。
輸入的是m個樣本,樣本輸出集合為D,每個樣本有n個離散特征,特征集合即為A,輸出為決策樹T。
算法的過程為:
1)初始化信息增益的閾值ϵϵ
2)判斷樣本是否為同一類輸出DiDi,如果是則返回單節點樹T。標記類別為DiDi
3) 判斷特征是否為空,如果是則返回單節點樹T,標記類別為樣本中輸出類別D實例數最多的類別。
4)計算A中的各個特征(一共n個)對輸出D的信息增益,選擇信息增益最大的特征AgAg
5) 如果AgAg的信息增益小於閾值ϵϵ,則返回單節點樹T,標記類別為樣本中輸出類別D實例數最多的類別。
6)否則,按特征AgAg的不同取值AgiAgi將對應的樣本輸出D分成不同的類別DiDi。每個類別產生一個子節點。對應特征值為AgiAgi。返回增加了節點的數T。
7)對於所有的子節點,令D=Di,A=A−{Ag}D=Di,A=A−{Ag}遞歸調用2-6步,得到子樹TiTi並返回。
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個,從小到大排列為a1,a2,...,ama1,a2,...,am,則C4.5取相鄰兩樣本值的中位數,一共取得m-1個划分點,其中第i個划分點Ti表示Ti表示為:Ti=ai+ai+12Ti=ai+ai+12。對於這m-1個點,分別計算以該點作為二元分類點時的信息增益。選擇信息增益最大的點作為該連續特征的二元離散分類點。比如取到的增益最大的點為atat,則小於atat的值為類別1,大於atat的值為類別2,這樣我們就做到了連續特征的離散化。要注意的是,與離散屬性不同的是,如果當前節點為連續屬性,則該屬性后面還可以參與子節點的產生選擇過程。
對於第二個問題,信息增益作為標准容易偏向於取值較多的特征的問題。我們引入一個信息增益比的變量IR(X,Y)IR(X,Y),它是信息增益和特征熵的比值。表達式如下:
其中D為樣本特征輸出的集合,A為樣本特征,對於特征熵HA(D)HA(D), 表達式如下:
其中n為特征A的類別數, DiDi為特征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算法。
對於C4.5算法,我們也提到了它的不足,比如模型是用較為復雜的熵來度量,使用了相對較為復雜的多叉樹,只能處理分類不能處理回歸等。對於這些問題, CART算法大部分做了改進。CART算法也就是我們下面的重點了。由於CART算法可以做回歸,也可以做分類,我們分別加以介紹,先從CART分類樹算法開始,重點比較和C4.5算法的不同點。接着介紹CART回歸樹算法,重點介紹和CART分類樹的不同點。然后我們討論CART樹的建樹算法和剪枝算法,最后總結決策樹算法的優缺點。
1. CART分類樹算法的最優特征選擇方法
我們知道,在ID3算法中我們使用了信息增益來選擇特征,信息增益大的優先選擇。在C4.5算法中,采用了信息增益比來選擇特征,以減少信息增益容易選擇特征值多的特征的問題。但是無論是ID3還是C4.5,都是基於信息論的熵模型的,這里面會涉及大量的對數運算。能不能簡化模型同時也不至於完全丟失熵模型的優點呢?有!CART分類樹算法使用基尼系數來代替信息增益比,基尼系數代表了模型的不純度,基尼系數越小,則不純度越低,特征越好。這和信息增益(比)是相反的。
具體的,在分類問題中,假設有K個類別,第k個類別的概率為pkpk, 則基尼系數的表達式為:
如果是二類分類問題,計算就更加簡單了,如果屬於第一個樣本輸出的概率是p,則基尼系數的表達式為:
對於個給定的樣本D,假設有K個類別, 第k個類別的數量為CkCk,則樣本D的基尼系數表達式為:
特別的,對於樣本D,如果根據特征A的某個值a,把D分成D1和D2兩部分,則在特征A的條件下,D的基尼系數表達式為:
大家可以比較下基尼系數表達式和熵模型的表達式,二次運算是不是比對數簡單很多?尤其是二類分類的計算,更加簡單。但是簡單歸簡單,和熵模型的度量方式比,基尼系數對應的誤差有多大呢?對於二類分類,基尼系數和熵之半的曲線如下:
從上圖可以看出,基尼系數和熵之半的曲線非常接近,僅僅在45度角附近誤差稍大。因此,基尼系數可以做為熵模型的一個近似替代。而CART分類樹算法就是使用的基尼系數來選擇決策樹的特征。同時,為了進一步簡化,CART分類樹算法每次僅僅對某個特征的值進行二分,而不是多分,這樣CART分類樹算法建立起來的是二叉樹,而不是多叉樹。這樣一可以進一步簡化基尼系數的計算,二可以建立一個更加優雅的二叉樹模型。
2. CART分類樹算法對於連續特征和離散特征處理的改進
對於CART分類樹連續值的處理問題,其思想和C4.5是相同的,都是將連續的特征離散化。唯一的區別在於在選擇划分點時的度量方式不同,C4.5使用的是信息增益,則CART分類樹使用的是基尼系數。
具體的思路如下,比如m個樣本的連續特征A有m個,從小到大排列為a1,a2,...,ama1,a2,...,am,則CART算法取相鄰兩樣本值的中位數,一共取得m-1個划分點,其中第i個划分點Ti表示Ti表示為:Ti=ai+ai+12Ti=ai+ai+12。對於這m-1個點,分別計算以該點作為二元分類點時的基尼系數。選擇基尼系數最小的點作為該連續特征的二元離散分類點。比如取到的基尼系數最小的點為atat,則小於atat的值為類別1,大於atat的值為類別2,這樣我們就做到了連續特征的離散化。要注意的是,與離散屬性不同的是,如果當前節點為連續屬性,則該屬性后面還可以參與子節點的產生選擇過程。
對於CART分類樹離散值的處理問題,采用的思路是不停的二分離散特征。
回憶下ID3或者C4.5,如果某個特征A被選取建立決策樹節點,如果它有A1,A2,A3三種類別,我們會在決策樹上一下建立一個三叉的節點。這樣導致決策樹是多叉樹。但是CART分類樹使用的方法不同,他采用的是不停的二分,還是這個例子,CART分類樹會考慮把A分成{A1}和{A2,A3}{A1}和{A2,A3}, {A2}和{A1,A3}{A2}和{A1,A3}, {A3}和{A1,A2}{A3}和{A1,A2}三種情況,找到基尼系數最小的組合,比如{A2}和{A1,A3}{A2}和{A1,A3},然后建立二叉樹節點,一個節點是A2對應的樣本,另一個節點是{A1,A3}對應的節點。從描述可以看出,如果離散特征A有n個取值,則可能的組合有n(n-1)/2種。同時,由於這次沒有把特征A的取值完全分開,后面我們還有機會在子節點繼續選擇到特征A來划分A1和A3。這和ID3或者C4.5不同,在ID3或者C4.5的一棵子樹中,離散特征只會參與一次節點的建立。
3. CART分類樹建立算法的具體流程
上面介紹了CART算法的一些和C4.5不同之處,下面我們看看CART分類樹建立算法的具體流程,之所以加上了建立,是因為CART樹算法還有獨立的剪枝算法這一塊,這塊我們在第5節講。
算法輸入是訓練集D,基尼系數的閾值,樣本個數閾值。
輸出是決策樹T。
我們的算法從根節點開始,用訓練集遞歸的建立CART樹。
1) 對於當前節點的數據集為D,如果樣本個數小於閾值或者沒有特征,則返回決策子樹,當前節點停止遞歸。
2) 計算樣本集D的基尼系數,如果基尼系數小於閾值,則返回決策樹子樹,當前節點停止遞歸。
3) 計算當前節點現有的各個特征的各個特征值對數據集D的基尼系數,對於離散值和連續值的處理方法和基尼系數的計算見第二節。缺失值的處理方法和上篇的C4.5算法里描述的相同。
4) 在計算出來的各個特征的各個特征值對數據集D的基尼系數中,選擇基尼系數最小的特征A和對應的特征值a。根據這個最優特征和最優特征值,把數據集划分成兩部分D1和D2,同時建立當前節點的左右節點,做節點的數據集D為D1,右節點的數據集D為D2.
5) 對左右的子節點遞歸的調用1-4步,生成決策樹。
對於生成的決策樹做預測的時候,假如測試集里的樣本A落到了某個葉子節點,而節點里有多個訓練樣本。則對於A的類別預測采用的是這個葉子節點里概率最大的類別。
4. CART回歸樹建立算法
CART回歸樹和CART分類樹的建立算法大部分是類似的,所以這里我們只討論CART回歸樹和CART分類樹的建立算法不同的地方。
首先,我們要明白,什么是回歸樹,什么是分類樹。兩者的區別在於樣本輸出,如果樣本輸出是離散值,那么這是一顆分類樹。如果果樣本輸出是連續值,那么那么這是一顆回歸樹。
除了概念的不同,CART回歸樹和CART分類樹的建立和預測的區別主要有下面兩點:
1)連續值的處理方法不同
2)決策樹建立后做預測的方式不同。
對於連續值的處理,我們知道CART分類樹采用的是用基尼系數的大小來度量特征的各個划分點的優劣情況。這比較適合分類模型,但是對於回歸模型,我們使用了常見的均方差的度量方式,CART回歸樹的度量目標是,對於任意划分特征A,對應的任意划分點s兩邊划分成的數據集D1和D2,求出使D1和D2各自集合的均方差最小,同時D1和D2的均方差之和最小所對應的特征和特征值划分點。表達式為:
其中,c1c1為D1數據集的樣本輸出均值,c2c2為D2數據集的樣本輸出均值。
對於決策樹建立后做預測的方式,上面講到了CART分類樹采用葉子節點里概率最大的類別作為當前節點的預測類別。而回歸樹輸出不是類別,它采用的是用最終葉子的均值或者中位數來預測輸出結果。
除了上面提到了以外,CART回歸樹和CART分類樹的建立算法和預測沒有什么區別。
5. CART樹算法的剪枝
CART回歸樹和CART分類樹的剪枝策略除了在度量損失的時候一個使用均方差,一個使用基尼系數,算法基本完全一樣,這里我們一起來講。
由於決策時算法很容易對訓練集過擬合,而導致泛化能力差,為了解決這個問題,我們需要對CART樹進行剪枝,即類似於線性回歸的正則化,來增加決策樹的返回能力。但是,有很多的剪枝方法,我們應該這么選擇呢?
CART采用的辦法是后剪枝法,即先生成決策樹,然后產生所有可能的剪枝后的CART樹,然后使用交叉驗證來檢驗各種剪枝的效果,選擇泛化能力最好的剪枝策略。
也就是說,CART樹的剪枝算法可以概括為兩步,第一步是從原始決策樹生成各種剪枝效果的決策樹,第二部是用交叉驗證來檢驗剪枝后的預測能力,選擇泛化預測能力最好的剪枝后的數作為最終的CART樹。
首先我們看看剪枝的損失函數度量,在剪枝的過程中,對於任意的一刻子樹T,其損失函數為:
其中,αα為正則化參數,這和線性回歸的正則化一樣。C(Tt)C(Tt)為訓練數據的預測誤差,分類樹是用基尼系數度量,回歸樹是均方差度量。|Tt||Tt|是子樹T的葉子節點的數量。
當α=0α=0時,即沒有正則化,原始的生成的CART樹即為最優子樹。當α=∞α=∞時,即正則化強度達到最大,此時由原始的生成的CART樹的根節點組成的單節點樹為最優子樹。當然,這是兩種極端情況。一般來說,αα越大,則剪枝剪的越厲害,生成的最優子樹相比原生決策樹就越偏小。對於固定的αα,一定存在使損失函數Cα(T)Cα(T)最小的唯一子樹。
看過剪枝的損失函數度量后,我們再來看看剪枝的思路,對於位於節點t的任意一顆子樹TtTt,如果沒有剪枝,它的損失是
如果將其剪掉,僅僅保留根節點,則損失是
當α=0α=0或者αα很小時,Cα(Tt)<Cα(T)Cα(Tt)<Cα(T) , 當αα增大到一定的程度時
。當αα繼續增大時不等式反向,也就是說,如果滿足下式:
TtTt和TT有相同的損失函數,但是TT節點更少,因此可以對子樹TtTt進行剪枝,也就是將它的子節點全部剪掉,變為一個葉子節點TT。
最后我們看看CART樹的交叉驗證策略。上面我們講到,可以計算出每個子樹是否剪枝的閾值αα,如果我們把所有的節點是否剪枝的值αα都計算出來,然后分別針對不同的αα所對應的剪枝后的最優子樹做交叉驗證。這樣就可以選擇一個最好的αα,有了這個αα,我們就可以用對應的最優子樹作為最終結果。
好了,有了上面的思路,我們現在來看看CART樹的剪枝算法。
輸入是CART樹建立算法得到的原始決策樹TT。
輸出是最優決策子樹TαTα。
算法過程如下:
1)初始化αmin=∞αmin=∞, 最優子樹集合ω={T}ω={T}。
2)從葉子節點開始自下而上計算各內部節點t的訓練誤差損失函數Cα(Tt)Cα(Tt)(回歸樹為均方差,分類樹為基尼系數), 葉子節點數|Tt||Tt|,以及正則化閾值α=min{C(T)−C(Tt)|Tt|−1,αmin}α=min{C(T)−C(Tt)|Tt|−1,αmin}, 更新αmin=ααmin=α
3) 得到所有節點的αα值的集合M。
4)從M中選擇最大的值αkαk,自上而下的訪問子樹t的內部節點,如果C(T)−C(Tt)|Tt|−1≤αkC(T)−C(Tt)|Tt|−1≤αk時,進行剪枝。並決定葉節點t的值。如果是分類樹,則是概率最高的類別,如果是回歸樹,則是所有樣本輸出的均值。這樣得到αkαk對應的最優子樹TkTk
5)最優子樹集合ω=ω∪Tkω=ω∪Tk, M=M−{αk}M=M−{αk}。
6) 如果M不為空,則回到步驟4。否則就已經得到了所有的可選最優子樹集合ωω.
7) 采用交叉驗證在ωω選擇最優子樹TαTα
6. CART算法小結
上面我們對CART算法做了一個詳細的介紹,CART算法相比C4.5算法的分類方法,采用了簡化的二叉樹模型,同時特征選擇采用了近似的基尼系數來簡化計算。當然CART樹最大的好處是還可以做回歸模型,這個C4.5沒有。下表給出了ID3,C4.5和CART的一個比較總結。希望可以幫助大家理解。
算法 | 支持模型 | 樹結構 | 特征選擇 | 連續值處理 | 缺失值處理 | 剪枝 |
ID3 | 分類 | 多叉樹 | 信息增益 | 不支持 | 不支持 | 不支持 |
C4.5 | 分類 | 多叉樹 | 信息增益比 | 支持 | 支持 | 支持 |
CART | 分類,回歸 | 二叉樹 | 基尼系數,均方差 | 支持 | 支持 | 支持 |
看起來CART算法高大上,那么CART算法還有沒有什么缺點呢?有!主要的缺點我認為如下:
1)應該大家有注意到,無論是ID3, C4.5還是CART,在做特征選擇的時候都是選擇最優的一個特征來做分類決策,但是大多數,分類決策不應該是由某一個特征決定的,而是應該由一組特征決定的。這樣絕息到的決策樹更加准確。這個決策樹叫做多變量決策樹(multi-variate decision tree)。在選擇最優特征的時候,多變量決策樹不是選擇某一個最優特征,而是選擇最優的一個特征線性組合來做決策。這個算法的代表是OC1,這里不多介紹。
2)如果樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習里面的隨機森林之類的方法解決。
7. 決策樹算法小結
終於到了最后的總結階段了,這里我們不再糾結於ID3, C4.5和 CART,我們來看看決策樹算法作為一個大類別的分類回歸算法的優缺點。這部分總結於scikit-learn的英文文檔。
首先我們看看決策樹算法的優點:
1)簡單直觀,生成的決策樹很直觀。
2)基本不需要預處理,不需要提前歸一化,處理缺失值。
3)使用決策樹預測的代價是O(log2m)O(log2m)。 m為樣本數。
4)既可以處理離散值也可以處理連續值。很多算法只是專注於離散值或者連續值。
5)可以處理多維度輸出的分類問題。
6)相比於神經網絡之類的黑盒分類模型,決策樹在邏輯上可以得到很好的解釋
7)可以交叉驗證的剪枝來選擇模型,從而提高泛化能力。
8) 對於異常點的容錯能力好,健壯性高。
我們再看看決策樹算法的缺點:
1)決策樹算法非常容易過擬合,導致泛化能力不強。可以通過設置節點最少樣本數量和限制決策樹深度來改進。
2)決策樹會因為樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習之類的方法解決。
3)尋找最優的決策樹是一個NP難的問題,我們一般是通過啟發式方法,容易陷入局部最優。可以通過集成學習之類的方法來改善。
4)有些比較復雜的關系,決策樹很難學習,比如異或。這個就沒有辦法了,一般這種關系可以換神經網絡分類方法來解決。
5)如果某些特征的樣本比例過大,生成決策樹容易偏向於這些特征。這個可以通過調節樣本權重來改善。
性能良好的決策樹的選擇標准是什么?
性能良好的決策樹的選擇標准是一個與訓練數據矛盾較小的決策樹,同時具有很好的泛化能力。言外之意就是說,好的決策樹不僅對訓練樣本有着很好的分類效果,對於測試集也有着較低的誤差率。
ID3、C4.5&CART
其實不同的決策樹學習算法只是它們選擇特征的依據不同,決策樹的生成過程都是一樣的(根據當前環境對特征進行貪婪的選擇)。
ID3算法的核心是在決策樹各個節點上應用信息增益准則選擇特征,每一次都選擇使得信息增益最大的特征進行分裂,遞歸地構建決策樹。
ID3算法以信息增益作為划分訓練數據集的特征,有一個致命的缺點。選擇取值比較多的特征往往會具有較大的信息增益,所以ID3偏向於選擇取值較多的特征。
針對ID3算法的不足,C4.5算法根據信息增益比來選擇特征,對這一問題進行了校正。
CART指的是分類回歸樹,它既可以用來分類,又可以被用來進行回歸。CART用作回歸樹時用平方誤差最小化作為選擇特征的准則,用作分類樹時采用基尼指數最小化原則,進行特征選擇,遞歸地生成二叉樹。
決策樹的剪枝:我們知道,決策樹在生成的過程中采用了貪婪的方法來選擇特征,從而達到對訓練數據進行更好地擬合(其實從極端角度來看,決策樹對訓練集的擬合可以達到零誤差)。而決策樹的剪枝是為了簡化模型的復雜度,防止決策樹的過擬合問題。具體的決策樹剪枝策略可以參見李航的《統計學習方法》。
參考:http://www.cnblogs.com/maybe2030/p/4734645.html
http://blog.csdn.net/ichuzhen/article/details/53981715