機器學習:決策樹算法

1.算法引入
先舉一個簡單的例子來介紹一下決策樹到底是個什麼東西。(參考:)
一個母親要給女兒介紹對象,所以有了如下的對話:
女兒:多大年紀了?
女兒:多大年紀了?
母親:26。
女兒:長的帥不帥?
母親:挺帥的。
女兒:收入高不?
母親:不算很高,中等情況。
女兒:是公務員不?
母親:是,在稅務局上班呢。
女兒:那好,我去見見。
這個女孩的判斷過程就是一個決策樹,她根據自己設置的一些標準(屬性)來對男方做是或者否的判斷,可以大致用以下圖來表示:
這裏寫圖片描述
實際上,決策樹的原理就是:根據樣本的屬性,生成一系列的規則,來對樣本進行判斷。每一個根節點就是屬性分裂點,每一個葉子節點就是判別結果。決策樹既可以處理離散變量,也可以處理連續變量。

2.決策樹的學習過程
一顆決策樹的生成過程主要分爲以下三步:
(1)特徵選擇:特徵選擇是指從衆多的特徵中選擇一個特徵作爲當前分裂的節點的分裂標準。如何選擇分裂的標準,這是決策樹的核心部分,也是衆多決策樹算法的不同點,後面會詳細敘述。
(2)決策樹生成:根據選擇的特徵評估標準,從上至下遞歸的生成子節點,直到數據集不能再分裂爲止,整個過程就是一個遞歸。
(3)樹剪枝:通過縮小樹結構規模,緩解過擬合,有預剪枝和後剪枝兩種。

3.幾種不同的決策樹算法
(1)ID3:以信息增益度量爲屬性選擇,選擇分裂後信息增益最大的屬性進行分裂( 從信息論知識中我們知道,期望信息越小,信息增益越大,從而純度越高)
注:期望信息越小,就是了解或者發生這件事情的所需要的信息越少,是不是意味着這件事情更容易發生,也就是分類越準確。
設D爲用來分裂的屬性,D的熵(entropy)爲:
這裏寫圖片描述
Pi:表示i類在整個訓練集中的概率(可以認爲是頻率,也是i類的佔比)。該式表示,我們要判斷一個樣本屬於i類,所需要的平均信息量。
按照D屬性分裂後的熵:
這裏寫圖片描述
j:第j類,結果求和
|Dj/D|:屬性的記錄佔總樣本的比例
信息增益是二者的差值,前者減去後者,保證信息增益爲正數:
這裏寫圖片描述
ID3每次分裂時,計算每個屬性的增益,然後按照最大增益的屬性分裂。舉一個比較經典的例子:
這裏寫圖片描述
其中s、m和l分別表示小、中和大。
設L、F、H和R表示日誌密度、好友密度、是否使用真實頭像和賬號是否真實,下面計算各屬性的信息增益。
這裏寫圖片描述
因此日誌密度的信息增益是0.276。用同樣方法得到H和F的信息增益分別爲0.033和0.553。因爲F具有最大的信息增益,所以第一次分裂選擇F爲分裂屬性,分裂後的結果如下圖表示:
這裏寫圖片描述
後面節點的分裂過程一樣
缺點:
ID3存在一個問題,偏向多值屬性。也就是說,若某個屬性所取的不同值越多,那麼越有可能拿它來做分裂屬性。例如,如果存在唯一標識,ID3會選擇它作爲分裂屬性,這樣的分裂是沒有意義的。什麼意思呢?假如我想知道一羣人中的收入的高低,給出的屬性有每個人的名字,平時消費的高低等,ID3會根據名字進行分裂,這樣的出來的結果能判斷一個人的收入高低麼?這樣分裂的目標就不是我們所需要的了。

(2)C4.5算法
C4.5是ID3的改進算法(具體爲啥叫這名,好像是說C4和C5都被用了,然後就叫了這個,但爲啥不叫C6,這我也不知道)。它使用信息增益率來選擇屬性,克服了ID3偏向多值屬性的缺點,公式:
這裏寫圖片描述
C4.5既可以處理離散值又可以處理連續值,離散值和ID3一樣。
在C4.5中,對連續屬性的處理如下:
1、對特徵的取值進行升序排序
2、兩個特徵取值之間的中點作爲可能的分裂點,將數據集分成兩部分,計算每個可能的分裂點的信息增益(InforGain)。優化算法就是隻計算分類屬性發生改變的那些特徵取值。
3、選擇修正後信息增益(InforGain)最大的分裂點作爲該特徵的最佳分裂點
4、計算最佳分裂點的信息增益率(Gain Ratio)作爲特徵的Gain Ratio。注意,此處需對最佳分裂點的信息增益進行修正:減去log2(N-1)/|D|(N是連續特徵的取值個數,D是訓練數據數目,此修正的原因在於:當離散屬性和連續屬性並存時,C4.5算法傾向於選擇連續特徵做最佳樹分裂點)
(3)CART
CART算法的全稱是Classification And Regression Tree,採用的是Gini指數(選Gini指數最小的特徵s)作爲分裂標準,同時它也是包含後剪枝操作。ID3算法和C4.5算法雖然在對訓練樣本集的學習中可以儘可能多地挖掘信息,但其生成的決策樹分支較大,規模較大。爲了簡化決策樹的規模,提高生成決策樹的效率,就出現了根據GINI係數來選擇測試屬性的決策樹算法CART
4.樹剪枝
決策樹很容易造成過擬合,有時會過分擬合數據中的噪聲和孤立點,減緩過擬合的方法一般使用樹剪枝,分爲預剪枝和後剪枝。
預剪枝:根據一些原則及早的停止樹增長,如樹的深度,節點中樣本數,不純指標下降的最大深度等,核心問題是如何事先指定樹的最大深度。
後剪枝:通過在完全生長的樹上減去分支,刪除節點。方法有很多種,如:代價複雜性剪枝,最小誤差剪枝等(實際上就是剪枝-檢驗-和剪枝前對比-是否剪枝)
5.幾點補充說明
(1)如果屬性用完了咋辦?即所有屬性用完了,但有的子集還是不純集,即集合內的元素不屬於同一類別。
一般對這些子集進行多數表決,用該子集中的最多的類別作爲節點類別。

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