C4.5是機器學習算法中的另一個分類決策樹算法,它是基於ID3算法的一種改進算法,相比於ID3算法,有以下幾個改進:
- C4.5用信息增益率來選擇屬性(ID3用信息增益選擇屬性)
- 在決策樹構造過程中進行剪枝,因爲某些具有很少元素的結點可能會使構造的決策樹過適應,如果不考慮這些結點可能會更好。
- 能夠處理非離散數據
- 能夠對不完整數據進行處理。
我們以一個很典型被引用過多次的訓練數據集D爲例,來說明C4.5算法如何計算信息增益並選擇決策結點。
上面的訓練集有4個屬性,即屬性集合A={天氣, 溫度, 溼度, 風速};而類標籤有2個,即類標籤集合C={進行, 取消},其實是一個二分類問題。
- 計算類別信息熵
類別信息熵表示的是所有樣本中各種類別出現的不確定性之和。根據熵的概念,熵越大,不確定性就越大,把事情搞清楚所需要的信息量就越多。
H(D) = -9/14 * log2(9/14) - 5/14 * log2(5/14) = 0.940
- 計算每個屬性的信息熵
每個屬性的信息熵相當於一種條件熵。他表示的是在某種屬性的條件下,各種類別出現的不確定性之和。屬性的信息熵越大,表示這個屬性中擁有的樣本類別越不“純”。
H(天氣) =
5/14 * [- 2/5 * log2(2/5) - 3/5 * log2(3/5)] +
4/14 * [- 4/4 * log2(4/4) - 0/4 * log2(0/4)] +
5/14 * [- 3/5 * log2(3/5) - 2/5 * log2(2/5)] = 0.694
H(溫度) =
4/14 * [- 2/4 * log2(2/4) - 2/4 * log2(2/4)] +
6/14 * [- 4/6 * log2(4/6) - 2/6 * log2(2/6)] +
4/14 * [- 3/4 * log2(3/4) - 1/4 * log2(1/4)] = 0.911
H(溼度) =
7/14 * [- 3/7 * log2(3/7) - 4/7 * log2(4/7)] +
7/14 * [- 6/7 * log2(6/7) - 1/7 * log2(1/7)] = 0.789
H(風速) =
6/14 * [- 3/6 * log2(3/6) - 3/6 * log2(3/6)] +
8/14 * [- 6/8 * log2(6/8) - 2/8 * log2(2/8)] = 0.892
- 計算信息增益
信息增益的 = 熵 - 條件熵,在這裏就是 類別信息熵 - 屬性信息熵,它表示的是信息不確定性減少的程度。如果一個屬性的信息增益越大,就表示用這個屬性進行樣本劃分可以更好的減少劃分後樣本的不確定性,當然,選擇該屬性就可以更快更好地完成我們的分類目標。
Gain(天氣) = Info(D) - Info(天氣) = 0.940 - 0.694 = 0.246
Gain(溫度) = Info(D) - Info(溫度) = 0.940 - 0.911 = 0.029
Gain(溼度) = Info(D) - Info(溼度) = 0.940 - 0.789 = 0.151
Gain(風速) = Info(D) - Info(風速) = 0.940 - 0.892 = 0.048
4.計算屬性分裂信息度量
用分裂信息度量來考慮某種屬性進行分裂時分支的數量信息和尺寸信息,我們把這些信息稱爲屬性的內在信息。信息增益率用信息增益 / 內在信息,會導致屬性的重要性隨着內在信息的增大而減小(也就是說,如果這個屬性本身不確定性就很大,那我就越不傾向於選取它),這樣算是對單純用信息增益有所補償。
= - 5/14 * log2(5/14) - 5/14 * log2(5/14) - 4/14 * log2(4/14) = 1.577
= - 4/14 * log2(4/14) - 6/14 * log2(6/14) - 4/14 * log2(4/14) = 1.556
= - 7/14 * log2(7/14) - 7/14 * log2(7/14) = 1.0
= - 6/14 * log2(6/14) - 8/14 * log2(8/14) = 0.985
5.計算信息增益率
= Gain(天氣) / = 0.246/1.577 = 0.156
= Gain(溫度) / = 0.029 / 1.556 = 0.018
= Gain(溼度) / = 0.151/1.0 = 0.151
= Gain(風速) / = 0.048/0.985 = 0.048