1. 程式人生 > >機器學習十大經典演算法:(1)C4.5演算法

機器學習十大經典演算法:(1)C4.5演算法

C4.5演算法是機器學習演算法中的一種分類決策樹演算法,其核心演算法是ID3演算法. C4.5演算法繼承了ID3演算法的優點,並在以下幾方面對ID3演算法進行了改進:

1)用資訊增益率來選擇屬性,克服了用資訊增益選擇屬性時偏向選擇取值多的屬性的不足;  

 2)在樹構造過程中進行剪枝;  

 3)能夠完成對連續屬性的離散化處理;  

 4)能夠對不完整資料進行處理。

C4.5演算法有如下優點:產生的分類規則易於理解,準確率較高。其缺點是:在構造樹的過程中,需要對資料集進行多次的順序掃描和排序,因而導致演算法的低效。


決策樹分類演算法的一般流程如下:一開始,所有的例項均位於根節點,所有引數的取值均離散化;根據啟發規則選擇一個引數,根據引數取值的不同對例項集進行分割;對分割後得到的節點進行同樣的啟發式引數選擇分割過程,如此往復,直到(a)分割得到的例項集合屬於同一類;(b)引數用完,以子集中絕大多數的例項類別作為該葉節點的類別。

核心問題:引數選擇規則   在每一個節點進行引數選擇時,由於有眾多的選項,需要一個選擇規則。基本的原則是使最後構造出的決策樹規模最小。基於這個基本原則,我們啟發式地定義規則為使分割後得到的子節點純度最大。於是引數選擇規則問題就轉化為了純度定義的問題。 我們利用熵(Entropy)的概念去描述“不純度”,熵值越大,說明這個節點的純度越低:當節點的類別均勻分佈時,熵值為1;當只包含一類時,熵值為0.熵的計算公式如下圖,以2為底的概率對數與概率乘積之和的相反數。


基於熵的概念,我們可以得到引數選擇的第一個規則:資訊增益(InfoGain).資訊增益的定義是分裂前的節點熵減去分裂後子節點熵的加權和,即不純度的減少量,也就是純度的增加量。引數選擇的規則是:選擇使資訊增益最大的引數分割該節點。資訊增益計算的算例如下圖。


資訊增益存在的問題時:總是傾向於選擇包含多取值的引數,因為引數的取值越多,其分割後的子節點純度可能越高。為了避免這個問題,我們引入了增益比例(GainRatio)的選擇指標,其定義如下圖所示。


增益比例存在的問題是:傾向於選擇分割不均勻的分裂方法,舉例而言,即一個拆分若分為兩個節點,一個節點特別多的例項,一個節點特別少的例項,那麼這種拆分有利於被選擇。   為了克服資訊增益和增益比例各自的問題,標準的解決方案如下:首先利用資訊增益概念,計算每一個引數分割的資訊增益,獲得平均資訊增益;選出資訊增益大於平均值的所有引數集合,對該集合計算增益比例,選擇其中增益比例最大的引數進行決策樹分裂。 


上面介紹的是基於熵概念的引數選擇規則,另一種流行的規則稱為基尼指數(GiniIndex),其定義如下圖。基尼係數在節點類別分佈均勻時取最大值1-1/n,在只包含一個類別時取最小值0.所以與熵類似,也是一個描述不純度的指標。


基於基尼係數的規則是:選擇不純度減少量(Reduction in impurity)最大的引數。不純度減少量是分割前的Giniindex減去分割後的Gini index。基尼係數的特點與資訊增益的特點類似。


過度擬合問題(Overfitting)   

過度擬合問題是對訓練資料完全擬合的決策樹對新資料的預測能力較低。為了解決這個問題,有兩種解決方法。第一種方法是前剪枝(prepruning),即事先設定一個分裂閾值,若分裂得到的資訊增益不大於這個閾值,則停止分裂。第二種方法是後剪枝(postpruning),首先生成與訓練集完全擬合的決策樹,然後自下而上地逐層剪枝,如果一個節點的子節點被刪除後,決策樹的準確度沒有降低,那麼就將該節點設定為葉節點(基於的原則是Occam剪刀:具有相似效果的兩個模型選擇較簡單的那個)。

代表演算法   這裡介紹兩個演算法,一個是RainForest,其主要的貢獻是引入了一個稱為AVC的資料結構,其示意圖如下。主要的作用是加速引數選擇過程的計算。


另一個演算法稱為BOAT,其採用了稱為bootstrap的統計技術對資料集進行分割,在分割的子資料集上分別構造決策樹,再基於這些決策樹構造一個新的決策樹,文章證明這棵新樹與基於全域性資料集構造的決策樹非常相近。這種方法的主要優勢在於支援增量更新。