決策樹可以作為分類算法,也可以作為回歸算法,同時特別適合集成學習比如隨機森林。
1. 決策樹ID3算法的信息論基礎
1970年昆蘭找到了用信息論中的熵來度量決策樹的決策選擇過程,昆蘭把這個算法叫做ID3。
熵度量了事物的不確定性,越不確定的事物,熵就越大。隨機變量X的熵的表達式如下:
其中n代表X的n種不同的離散取值。而pi代表了X取值為i的概率,log為以2或者e為底的對數。舉個例子,比如X有2個可能的取值,而這兩個取值各為1/2時X的熵最大,此時X具有最大的不確定性。值為如果一個值概率大於1/2,另一個值概率小於1/2,則不確定性減少,對應的熵也會減少。比如一個概率1/3,一個概率2/3,則對應熵為
熟悉了一個變量X的熵,很容易推廣到多個變量的聯合熵,這里給出兩個變量X和Y的聯合熵表達式:
有了聯合熵,又可以得到條件熵的表達式H(X|Y),條件熵類似於條件概率,它度量了我們的X在知道Y以后剩下的不確定性。表達式如下:
H(X)度量了X的不確定性,條件熵H(X|Y)度量了我們在知道Y以后X剩下的不確定性,H(X)-H(X|Y)度量了X在知道Y以后不確定性減少程度,這個度量我們在信息論中稱為互信息,記為I(X,Y)。在決策樹ID3算法中叫做信息增益。信息增益大,則越適合用來分類。
用下面這個圖很容易明白他們的關系。左邊的橢圓代表H(X),右邊的橢圓代表H(Y),中間重合的部分就是我們的互信息或者信息增益I(X,Y), 左邊的橢圓去掉重合部分就是H(X|Y),右邊的橢圓去掉重合部分就是H(Y|X)。兩個橢圓的並就是H(X,Y)。
2. 決策樹ID3算法的思路
ID3算法思想:用信息增益最大的特征來建立決策樹的當前節點。下面是一個具體例子。
15個樣本D,其中9個輸出為1,6個輸出為0。樣本中有特征A,取值為A1,A2,A3。在取值為A1的樣本的輸出中,有3個輸出為1,2個輸出為0,取值為A2的樣本中,2個輸出為1,3個輸出為0,在取值為A3的樣本中,4個輸出為1,1個輸出為0。
樣本D的熵為:
樣本D在特征下的條件熵為:
對應的信息增益為:
這里只有一個特征A,當有多個特征時,選擇信息增益最大的特征作為節點特征,由該特征的不同取值最為子節點,以此類推,構建決策樹。
已知:輸入的是m個樣本,樣本輸出集合為D,每個樣本有n個離散特征,特征集合即為A,輸出為決策樹T。
具體算法過程:
- 初始化信息增益的閾值ε
- 判斷樣本是否為同一類輸出Di,如果是則返回單節點樹T。標記類別為Di
- 判斷特征是否為空,如果是則返回單節點樹T,標記類別為樣本中輸出類別D實例數最多的類別
- 計算A中的各個特征(一共n個)對輸出D的信息增益,選擇信息增益最大的特征Ag
- 如果Ag的信息增益小於閾值ε,則返回單節點樹T,標記類別為樣本中輸出類別D實例數最多的類別。
- 否則,按特征Ag的不同值Agi將對應的樣本輸出D分成不同的類別Di。每個類別產生一個子節點。對應特征值為Agi。返回增加了節點的數T。
- 對於所有子節點,令D = Di ,A = A- {Ag}遞歸調用2-6步,得到子樹Ti並返回。
具體實例見:https://blog.csdn.net/gumpeng/article/details/51397737
3. 決策樹ID3算法的不足
- ID3沒考慮連續特征,比如長度,密度都是連續值,無法在ID3運用。
- ID3用信息增益作為標准容易偏向取值較多的特征。然而在相同條件下,取值比較多的特征比取值少的特征信息增益大。比如一個變量有2個值,各為1/2,另一個變量為3個值,各為1/3,其實他們都是完全不確定的變量,但是取3個值比取2個值的信息增益大。如何校正這個問題?
- ID3算法沒考慮缺失值問題。
- 沒考慮過擬合問題。
4. 決策樹C4.5算法對ID3的改進
針對ID3算法4個主要的不足,一是不能處理連續特征,二是用信息增益作為標准容易偏向取值較多的特征,最后是缺失值處理的問題和過擬合問題。
(1)、對不能處理連續值特征,C4.5思路:將連續的特征離散化。
- 將m個連續樣本從小到大排列。(比如 m 個樣本的連續特征A有 m 個,從小到大排列 a1,a2,......am)
- 取相鄰兩樣本值的平均數,會得m-1個划分點。(其中第i個划分點Ti表示為:
)
- 對於這m-1個點,分別計算以該點作為二元分類點時的信息增益。選擇信息增益最大的點作為該連續特征的二元離散分類點。(比如取到的增益最大的點為at,則小於at的值為類別1,大於at的值為類別2,這樣就做到了連續特征的離散化。注意的是,與離散屬性不同,如果當前節點為連續屬性,則該屬性后面還可以參與子節點的產生選擇過程。)
- 用信息增益比選擇最佳划分。
注意:選擇連續特征的分類點采用信息增益這個指標,因為若采用增益比,影響分裂點信息度量准確性,若某分界點恰好將連續特征分成數目相等的兩部分時其抑制作用最大,而選擇屬性的時候才使用增益比,這個指標能選擇出最佳分類特征。
(2)、對於信息增益作為標准容易偏向於取值較多特征的問題。引入一個信息增益比 IR(Y, X),它是信息增益與特征熵(也稱分裂信息)的比。表達式:
其中D為樣本特征輸出的集合,A為樣本特征,對於特征熵 HA(D),表達式:
其中n為特征A的類別數,|Di|為特征A的第i個取值對應的樣本個數。|D|為樣本個數。
特征數越多的特征對應的特征熵越大,它作為分母,可以校正信息增益容易偏向於取值較多的特征的問題。
(3)、對於缺失值處理的問題,主要需要解決的是兩個問題,一是在樣本某些特征缺失的情況下選擇划分的屬性,二是選定了划分屬性,對於在該屬性上缺失特征的樣本的處理。
對於第一個子問題,對於某一個有缺失特征值的特征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。
5. 決策樹C4.5算法的不足與改進
(1)、決策樹算法非常容易過擬合,因此對於生成的決策樹要進行剪枝。C4.5的剪枝方法有優化的空間。思路主要是兩種,一種是預剪枝,即在生成決策樹的時候就決定是否剪枝。另一個是后剪枝,即先生成決策樹,再通過交叉驗證來剪枝。后面在下篇講CART樹的時候我們會專門講決策樹的減枝思路,主要采用的是后剪枝加上交叉驗證選擇最合適的決策樹。
(2)、C4.5生成的是多叉樹,在計算機中二叉樹模型會比多叉樹運算效率高。多叉樹改二叉樹,可以提高效率。
(3)、C4.5只能用於分類。
(4)、C4.5由於使用了熵模型,里面有大量的耗時的對數運算,如果是連續值還有大量的排序運算。如果能夠加以模型簡化減少運算強度但又不犧牲太多准確性的話,因此用基尼系數代替熵模型。
來自:https://www.cnblogs.com/pinard/p/6050306.html
來自:https://blog.csdn.net/zhangbaoanhadoop/article/details/79904091
來自:http://leijun00.github.io/2014/09/decision-tree/
(有例子容易理解)來自:https://blog.csdn.net/gumpeng/article/details/51397737