決策樹之 C4.5 演算法
前言
由於 C4.5 演算法是建立在 ID3 演算法基礎之上的,所以在講解 C4.5 的時候,會有很多與 ID3 重合的內容,這裡就不過多冗餘地說明了。本文旨在闡明 ID3 存在的問題,以及 C4.5 的改進方案。如果你對於 ID3 中的相關數學公式及概念還有些迷惑,歡迎移步至《決策樹之 ID3 演算法》。
版權說明
C4.5
決策樹構建分析
我們說 C4.5 演算法是對 ID3 演算法的改進,既然是改進,那麼必然是解決了一些問題,而且這些問題還是比較突出的。
1. 解決了資訊增益(IG)的缺點
2. 解決了連續變數問題
IG 的缺點及解決方案
上一篇說 ID3 演算法時,瞭解到 IG 是描述某一個特徵屬性的存在與否,對總體資訊熵的變化量影響。通過 IG 的公式(如果你不記得 IG 的公式,歡迎移步至《
連續變數問題
在 ID3 中,我們不能解決連續變數問題,比如把之前的溫度屬性的值修改成一些整數型別的變數時,ID3 的做法就是對每一個不同值的變數進行分開計算,這樣就出現了一個問題,ID3 構建的決策樹中產生了過多的分支。這個時候,你可能會想說,如果把這些值修改成某一個域值,讓小於等於這個域值的資料放在決策樹的左邊,大於這個域值的資料放在決策樹的右邊。C4.5 中就是這麼幹的,只是 C4.5 在尋找這個域值時,更加合理。
訓練資料集
假設我們如下訓練資料集
Day | OutLook | Temperature | Humidity | Wind | PlayGolf |
---|---|---|---|---|---|
1 | Sunny | 85 | 85 | False | No |
2 | Sunny | 80 | 90 | True | No |
3 | Overcast | 83 | 78 | False | Yes |
4 | Rainy | 70 | 96 | False | Yes |
5 | Rainy | 68 | 80 | False | Yes |
6 | Rainy | 65 | 70 | True | No |
7 | Overcast | 64 | 65 | True | Yes |
8 | Sunny | 72 | 95 | False | No |
9 | Sunny | 69 | 70 | False | Yes |
10 | Rainy | 75 | 80 | False | Yes |
11 | Sunny | 75 | 70 | True | Yes |
12 | Overcast | 72 | 90 | True | Yes |
13 | Overcast | 81 | 75 | False | Yes |
14 | Rainy | 71 | 80 | True | No |
決策樹構建過程
根據 C4.5 演算法的原理及步驟繪製出如下過程圖:
計算步驟
雖然上圖中需要計算的量有很多,但是,有很量的計算在《決策樹之 ID3 演算法》一文中,講解得也很詳細了,所以這裡我不再說明。需要說明的只有兩個地方:IV 和 連續變數的域值計算。
IV(T) & IGR(T)
從上面的分裂資訊的計算公式中,可以看到分裂資訊的計算是針對某一個特徵屬性內部而言的。比如現在針對特徵屬性 OutLook 這一特徵屬性而言有如下分裂資訊的分佈情況:
Sunny | Overcast | Rainy | |
---|---|---|---|
結果總數 | 5 | 4 | 5 |
那麼 OutLook 的分裂資訊 IV(OutLook) 就可以這樣來計算:
於是,再有
連續變數的域值
上面說的都是針對離散變數問題的解決思路及過程,如果某一個特徵屬性的變數值不能或是不合適使用離散變數來處理,又該怎麼做呢?比如在之前 ID3 演算法的文章中使用的溫度屬性,這個屬性的變數值使用連續變數應該更合適一些,最基本的邏輯就是溫度達到多少算是 Hot,達到多少算是 Cool 呢?這個不好衡量,可是如果使用連續變數就要合理得多。
可是 ID3 演算法在對連續變數的處理上,表現很糟糕。在 C4.5 中是通過如下方法解決的。
假設我們選擇了溫度屬性,則被提取的關鍵資料為:[[85, No], [80, No], [83, Yes], [70, Yes], [68, Yes], [65, No], [64, Yes], [72, No], [69, Yes], [75, Yes], [75, Yes], [72, Yes], [81, Yes], [71, No]]
現在我們對這批資料進行從小到大進行排序,排序後資料集就變成:
[[64, Yes], [65, No], [68, Yes], [69, Yes], [70, Yes], [71, No], [72, No], [72, Yes], [75, Yes], [75, Yes], [80, No], [81, Yes], [83, Yes], [85, No]]
繪製成如下圖例:
當我們拿到一個已經排好序的(溫度,結果)的列表之後,分別計算被某個單元分隔的左邊和右邊的分裂資訊,計算結果如下:
比如現在計算 index = 4 時的分裂資訊。則:
這時就可以選取最大分裂資訊的位置當成此時的域值,也就是 68。
然後,此時溫度的分裂就是按照小於等於 68 和大於 68 進行劃分。
決策樹構建結果
通過上面的訓練資料集及 C4.5 構建演算法,我們構建了一棵如下的 C4.5 決策樹。