分类算法之决策树C4.5算法
C4.5,是機器學習算法中的另一個分類決策樹算法,它是決策樹(決策樹也就是做決策的節點間的組織方式像一棵樹,其實是一個倒樹)核心算法,也是上節所介紹的ID3的改進算法,所以基本上了解了一半決策樹構造方法就能構造它。
????決策樹構造方法其實就是每次選擇一個好的特征以及分裂點作為當前節點的分類條件。
????既然說C4.5算法是ID3的改進算法,那么C4.5相比于ID3改進的地方有哪些呢?:
?
針對上述第一點,解釋下:一般來說率就是用來取平衡用的,就像方差起的作用差不多,比如有兩個跑步的人,一個起點是10m/s的人、其10s后為20m/s;另一個人起速是1m/s、其1s后為2m/s。如果緊緊算差值那么兩個差距就很大了,如果使用速度增加率(加速度,即都是為1m/s^2)來衡量,2個人就是一樣的加速度。因此,C4.5克服了ID3用信息增益選擇屬性時偏向選擇取值多的屬性的不足。
C4.5算法之信息增益率
????OK,既然上文中提到C4.5用的是信息增益率,那增益率的具體是如何定義的呢?:
????是的,在這里,C4.5算法不再是通過信息增益來選擇決策屬性。一個可以選擇的度量標準是增益比率gain?ratio(Quinlan?1986)。增益比率度量是用前面的增益度量Gain(S,A)和分裂信息度量SplitInformation(S,A)來共同定義的,如下所示:
????其中,分裂信息度量被定義為( 分裂信息用來衡量屬性分裂數據的廣度和均勻):
???
????其中S1到Sc是c個值的屬性A分割S而形成的c個樣例子集。注意分裂信息實際上就是S關于屬性A的各值的熵。這與我們前面對熵的使用不同,在那里我們只考慮S關于學習到的樹要預測的目標屬性的值的熵。
????請注意,分裂信息項阻礙選擇值為均勻分布的屬性。例如,考慮一個含有n個樣例的集合被屬性A徹底分割(譯注:分成n組,即一個樣例一組)。這時分裂信息的值為log2n。相反,一個布爾屬性B分割同樣的n個實例,如果恰好平分兩半,那么分裂信息是1。如果屬性A和B產生同樣的信息增益,那么根據增益比率度量,明顯B會得分更高。
????使用增益比率代替增益來選擇屬性產生的一個實際問題是,當某個Si接近S(|Si|?|S|)時分母可能為0或非常小。如果某個屬性對于S的所有樣例有幾乎同樣的值,這時要么導致增益比率未定義,要么是增益比率非常大。為了避免選擇這種屬性,我們可以采用這樣一些啟發式規則,比如先計算每個屬性的增益,然后僅對那些增益高過平均值的屬性應用增益比率測試(Quinlan?1986)。
?????????????????????? 信息增益比 = 懲罰參數 * 信息增益 書中公式: 注意:其中的HA(D),對于樣本集合D,將當前特征A作為隨機變量(取值是特征A的各個特征值),求得的經驗熵。 (之前是把集合類別作為隨機變量,現在把某個特征作為隨機變量,按照此特征的特征取值對集合D進行劃分,計算熵HA(D)) ? ? ? 信息增益比本質: 是在信息增益的基礎之上乘上一個懲罰參數。特征個數較多時,懲罰參數較小;特征個數較少時,懲罰參數較大。 ? ? ? ? 懲罰參數:數據集D以特征A作為隨機變量的熵的倒數,即:將特征A取值相同的樣本劃分到同一個子集中(之前所說數據集的熵是依據類別進行劃分的) ? ? ? ?? 缺點:信息增益比偏向取值較少的特征 ?? 原因:? 當特征取值較少時HA(D)的值較小,因此其倒數較大,因而信息增益比較大。因而偏向取值較少的特征。下面以ID3相同的weather數據集(全部為分類屬性)為例,分析C4.5構建決策樹的詳細過程。
<1> 計算所有屬性劃分數據集S所得的信息增益分別如下:
Gain(S,outlook)=0.246
Gain(S,temperature)=0.029
Gain(S,humidity)=0.152
Gain(S,wind)=0.049
<2>?計算各屬性的分裂信息和信息增益率。
對outlook屬性,取值為overcast的樣本有4條,取值為rain的樣本有5條,取值為sunny的樣本有5條,則
對temperature屬性,取值為cool的樣本有4條,取值為hot的樣本有4條,取值為mild的有6條,則
對humidity屬性,取值為high的樣本有7條,取值為normal的樣本有7條,則
對wind屬性,取值為weak的樣本有8條,取值為strong的樣本有6條,則
可以看出,outlook屬性的信息增益率是最大的,所以選擇outlook屬性作為決策樹的根節點,產生3個分支,往后計算依次類推。
在決策樹的創建時,由于數據中的噪聲和離群點,許多分枝反映的是訓練數據中的異常。剪枝方法是用來處理這種過分擬合數據的問題。通常剪枝方法都是使用統計度量,剪去最不可靠的分枝。
??? 剪枝一般分兩種方法:先剪枝和后剪枝。
??? 先剪枝方法中通過提前停止樹的構造(比如決定在某個節點不再分裂或劃分訓練元組的子集)而對樹剪枝。一旦停止,這個節點就變成樹葉,該樹葉可能取它持有的子集最頻繁的類作為自己的類。先剪枝有很多方法,比如(1)當決策樹達到一定的高度就停止決策樹的生長;(2)到達此節點的實例具有相同的特征向量,而不必一定屬于同一類,也可以停止生長(3)到達此節點的實例個數小于某個閾值的時候也可以停止樹的生長,不足之處是不能處理那些數據量比較小的特殊情況(4)計算每次擴展對系統性能的增益,如果小于某個閾值就可以讓它停止生長。先剪枝有個缺點就是視野效果問題,也就是說在相同的標準下,也許當前擴展不能滿足要求,但更進一步擴展又能滿足要求。這樣會過早停止決策樹的生長。
??? 另一種更常用的方法是后剪枝,它由完全成長的樹剪去子樹而形成。通過刪除節點的分枝并用樹葉來替換它。樹葉一般用子樹中最頻繁的類別來標記。
??? C4.5采用悲觀剪枝法,它使用訓練集生成決策樹又用它來進行剪枝,不需要獨立的剪枝集。
??? 悲觀剪枝法的基本思路是:設訓練集生成的決策樹是T,用T來分類訓練集中的N的元組,設K為到達某個葉子節點的元組個數,其中分類錯誤地個數為J。由于樹T是由訓練集生成的,是適合訓練集的,因此J/K不能可信地估計錯誤率。所以用(J+0.5)/K來表示。設S為T的子樹,其葉節點個數為L(s),?為到達此子樹的葉節點的元組個數總和,?為此子樹中被錯誤分類的元組個數之和。在分類新的元組時,則其錯誤分類個數為?,其標準錯誤表示為:? 。當用此樹分類訓練集時,設E為分類錯誤個數,當下面的式子成立時,則刪掉子樹S,用葉節點代替,且S的子樹不必再計算。
?????????。
總結
以上是生活随笔為你收集整理的分类算法之决策树C4.5算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中定义实例变量时指定初始化值顺序
- 下一篇: 分类算法之决策树CART算法