機器學習(七):決策樹

決策樹(Decision Tree)可以算是分類算法中最著名的模型了,因爲它是基於人們最能理解的規則來構造分類器,且每一次分支都能給出解釋。
決策樹大家族十分龐大,這裏只介紹基於決策樹的單一分類模型,不包括基於深度學習的GBDT。
決策樹有點類似二叉排序樹,到達節點時,就比較一次,然後進入下一個節點。

度量劃分

基本上來說,對於度量的選擇,我們都希望,所選擇的度量能夠將樣本劃分的更純。不純的程度越低,類分類就越傾斜。

信息熵、基尼指數與分類誤差

三個度量方式都很容易理解,只不過對於誤差的處理不同。
假設c是類的個數,則各指數的計算公式如下:

Entropy=i=0c1p(i|t)log2p(i|t)Gini=1i=0c1p(i|t)2ClassificationError=1maxip(i|t)

這三類的度量看似一致,從計算上來說都可以表示劃分的不純性度量,但需要指出的是,三個指標並不等價,即存在同一批數據對於三種度量,劃分屬性大小不一致的情況。
需要說明的是,度量的選擇對於決策樹算法的性能影響很小。

信息增益

有了度量標準,那麼選擇屬性的標準也就出來了,那就是選擇的屬性就是選擇前後度量差最大的那個。
如果選擇的度量時信息熵,那麼度量差就叫做信息增益。

增益率

使用信息增益看似很合理,因爲純度越高,毫無疑問分類越好,但這種考慮有失偏頗,因爲它沒有規定屬性取值的個數。這使得屬性可能的取值個數越多,該屬性越可能被選來做劃分。
這個問題可能導致的直接後果就是過擬合,過擬合會導致模型的泛化能力下降。
由此需要考慮將屬性的個數信息考慮進去。
於是就有了劃分屬性的定義,vi 代表屬性v取值爲vi

p(vi)=vviSplit Info v=i=0kp(vi)log2p(vi)

增益率的定義如下:
GainRatio=GainSplit Info v

這樣一來,使用信息增益就可以較好的平衡分類效果和泛化能力了。

剪枝

構建決策樹模型時,過擬合是一個實際問題,隨着樹的深度越來越大,越來越多的噪音被考慮進去,此時預測誤差會上升。
一般通過剪枝的方法避免過擬合,預剪枝後剪枝
預剪枝就是在決策樹模型構建時決定是否需要減除該節點。
有多種方法能判斷是否需要該節點,比如通過分裂節點的信息增益與閾值的比較,但閾值的選擇很難。
還有一種方法就是根據分裂節點的泛化誤差來決定,即從訓練數據中分出一部分驗證數據,節點分裂時(此時可以確定的是對於訓練集,節點的劃分是有益的),使用驗證數據來評判劃分是否能提高正確率,依次決定是否確定劃分。

後剪枝同理也可以使用驗證集作爲評判標準。

即預剪枝和後剪枝都可以使用驗證集作爲是否分裂的標準,與決策樹的構建先後無關。
但兩者所獲得的結果是有區別的:往往後剪枝獲得的決策樹要比預剪枝獲得的大,且欠擬合風險很小,泛化性能往往更優,但毫無疑問的是,後剪枝的開銷更大。

連續值

對於連續值,一般採用最容易理解的二分法:
比如樣本中長度有如下取值:

長度 1.6 1.7 1.4 1.2 1.1 1.9 2.0 1.8 0.9 1.1 1.0
label X X Y Y Y X X X Y Y Y

於是先將長度排序,然後依次取相鄰兩個長度的中值作爲二分的臨界值,比較那個中值能獲得最大的信息增益。下面將介紹的C4.5決策樹就是採用這種方法。

缺失值

對於缺失值需要考慮兩個問題:
1.樣本集屬性缺失,如何根據缺失的屬性來選擇劃分節點?
在不做缺失值填充的情況下,顯然只能使用在該節點沒有缺失值的子樣本集進行計算,然後信息增益的計算最後需要乘上一個不缺失係數(即該節點不缺失的樣本集數與總樣本的比)
2.預測集屬性缺失
若預測時,某個屬性缺失,則以一定概率將該樣本劃分到該節點的各個取值中。至於這個概率如何選取,參考資料決策樹是如何處理不完整數據的?

斜決策樹

單變量決策樹的每個節點都是使用一個屬性,這樣生成的決策樹如果用座標空間來刻畫(屬性即座標軸),劃分的邊界都是平行於座標軸的。
但有時候單一的屬性很難刻畫分類的邊緣,會造成抖動,而這個抖動只需要一條斜邊就可以很好的解決了。
其實所謂的斜邊就是屬性的線性組合。
即節點使用多個屬性的線性表達式來作爲評判標準。

特點

作爲一個總結,決策樹的優缺點特別列出
1. 決策樹不要求任何先驗假設
2. 找到最佳決策樹是NP完全問題,因此一般採用啓發式的貪心算法
3. 決策樹對於噪聲的干擾有較好的魯棒性
4. 冗餘屬性不會對決策樹的準確率造成不利影響

三個決策樹模型

這三個決策樹模型分別是ID3, C4.5和CART.
其實這些決策樹都是上面介紹的基本決策樹的變形,之所以需要單獨拿出來是因爲這三者是最著名的決策樹模型,且應對不同的領域。

ID3

ID3算法,使用信息增益(也即信息熵,注意不是增益率)作爲劃分標準 ,但和上述描述的決策樹不同的是,一旦節點選擇某個屬性劃分後,就刪除該屬性,即一個屬性只能使用一次。這使得ID3生成的決策樹很小。
從構建過程來看,這也是個標準的貪心式流程。
毫無疑問,ID3擁有決策樹的大部分優缺點。

C4.5

從ID3的構建中,我們發現了ID3只是實現了最基本的決策樹構建過程,諸如連續值,過擬合,缺失值等都未處理。
於是就有了基於ID3的改進版——C4.5算法。
1. 針對屬性取值問題——拋棄信息增益,使用信息增益率,避免選擇屬性劃分時偏向多取值的屬性
2. 針對過擬合的問題——使用剪枝處理(預剪枝和後剪枝),避免過擬合
3. 針對數值型的屬性——使用排序後取中值的測試方法,選擇合適的劃分
4. 針對缺失值的問題——參考上述講解
C4.5有一些版本,有些採取了上面的全部改進,有些只採取了一兩個改進,應該來說,C4.5是ID3的一次升級。本質上並未作出太大的原則性改動

CART

CART(Classification And Regression Tree)分類迴歸數,與上面不同的是,該算法有兩大特點:
1. 使用gini指標作爲分類的標準
2. 節點的決策只能是“是”或“否”,即節點採用二分類

注意節點採用二分類的實現方式,之前某個屬性X有是哪個取值”A”,”B”,”C”,對於CART模型來說,如果該屬性被選擇作爲節點,則該節點的判定條件只能是X=”A”?兩個分支取是或者否兩個值。
貼一個參考鏈接決策樹之CART算法

最後CART還可以用於迴歸,這部分有時間在介紹。

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