參考博客:
https://www.jianshu.com/p/8eaeab891341 (C4.5)
決策樹是一種逼近離散值目標函數的方法,學習到的函數被表示為一棵決策樹
根節點包含全部訓練樣本 自頂向下分而治之的策略
決策樹算法以樹狀結構來表示數據的分類結果,每一個決策點實現一個具有離散輸出的測試函數,記為分支
根節點
非葉子節點 (代表測試的條件,對數據屬性的測試 決策點)
葉子節點 (代表分類后所獲得的分類標記)
分支 (代表測試的結果)
決策樹-熵
P(X,Y) = P(X) * P(Y) X和Y兩個事件相互獨立 Log(XY) = Log(X) + Log(Y)
H(X),H(Y)當成它們發生的不確定性
P(幾率越大)->H(X)值越小 如:今天正常上課
P(幾率越小)->H(X)值越大 如:今天沒翻車
我們統計了14天的氣象數據(指標包括outlook,temperature,humidity,windy),並已知這些天氣是否打球(play)。如果給出新一天的氣象指標數據:sunny,cool,high,TRUE,判斷一下會不會去打球。
table 1
outlook | temperature | humidity | windy | play |
sunny | hot | high | FALSE | no |
sunny | hot | high | TRUE | no |
overcast | hot | high | FALSE | yes |
rainy | mild | high | FALSE | yes |
rainy | cool | normal | FALSE | yes |
rainy | cool | normal | TRUE | no |
overcast | cool | normal | TRUE | yes |
sunny | mild | high | FALSE | no |
sunny | cool | normal | FALSE | yes |
rainy | mild | normal | FALSE | yes |
sunny | mild | normal | TRUE | yes |
overcast | mild | high | TRUE | yes |
overcast | hot | normal | FALSE | yes |
rainy | mild | high | TRUE | no |
這個問題當然可以用朴素貝葉斯法求解,分別計算在給定天氣條件下打球和不打球的概率,選概率大者作為推測結果。
現在我們使用ID3歸納決策樹的方法來求解該問題。
預備知識:信息熵
熵是無序性(或不確定性)的度量指標。假如事件A的全概率划分是(A1,A2,...,An),每部分發生的概率是(p1,p2,...,pn),那信息熵定義為:
通常以2為底數,所以信息熵的單位是bit。
補充兩個對數去處公式:
ID3算法
構造樹的基本想法是隨着樹深度的增加,節點的熵迅速地降低。熵降低的速度越快越好,這樣我們有望得到一棵高度最矮的決策樹。
在沒有給定任何天氣信息時,根據歷史數據,我們只知道新的一天打球的概率是9/14,不打的概率是5/14。此時的熵為:
屬性有4個:outlook,temperature,humidity,windy。我們首先要決定哪個屬性作樹的根節點。
對每項指標分別統計:在不同的取值下打球和不打球的次數。
table 2
outlook | temperature | humidity | windy | play | |||||||||
yes | no | yes | no | yes | no | yes | no | yes | no | ||||
sunny | 2 | 3 | hot | 2 | 2 | high | 3 | 4 | FALSE | 6 | 2 | 9 | 5 |
overcast | 4 | 0 | mild | 4 | 2 | normal | 6 | 1 | TRUR | 3 | 3 | ||
rainy | 3 | 2 | cool | 3 | 1 | |
下面我們計算當已知變量outlook的值時,信息熵為多少。
outlook=sunny時,2/5的概率打球,3/5的概率不打球。entropy=0.971
outlook=overcast時,entropy=0
outlook=rainy時,entropy=0.971
而根據歷史統計數據,outlook取值為sunny、overcast、rainy的概率分別是5/14、4/14、5/14,所以當已知變量outlook的值時,信息熵為:5/14 × 0.971 + 4/14 × 0 + 5/14 × 0.971 = 0.693
這樣的話系統熵就從0.940下降到了0.693,信息增溢gain(outlook)為0.940-0.693=0.247
同樣可以計算出gain(temperature)=0.029,gain(humidity)=0.152,gain(windy)=0.048。
gain(outlook)最大(即outlook在第一步使系統的信息熵下降得最快),所以決策樹的根節點就取outlook。
接下來要確定N1取temperature、humidity還是windy?在已知outlook=sunny的情況,根據歷史數據,我們作出類似table 2的一張表,分別計算gain(temperature)、gain(humidity)和gain(windy),選最大者為N1。
依此類推,構造決策樹。當系統的信息熵降為0時,就沒有必要再往下構造決策樹了,此時葉子節點都是純的--這是理想情況。最壞的情況下,決策樹的高度為屬性(決策變量)的個數,葉子節點不純(這意味着我們要以一定的概率來作出決策)。
概要
- 關於決策樹
決策樹其實是一種分類算法,目標是將具有P個維度特征的樣本n划分到c個類別中: c = f(n); 通過這種分類的過程表示為一棵樹,每次通過選擇一個特征pi來進行分叉。
每個葉節點對應着一個分類,非葉節點對應着在每個屬性上的划分,根據樣本在該屬性上的不同取值將其划分成若干個子集。對於非純的葉節點,多數類的標號給出到達這個節點的樣本所屬的類。
構建決策樹的核心問題: 在每一步如何選擇適當的屬性對樣本進行拆分。
- 不同的決策樹算法有着不同的特征選擇方案
1、ID3: 信息增益
2、C4.5: 信息增益率
3、CART: gini系數(基尼系數)
算法 | 描述 | 適用 |
---|---|---|
ID3 | 在決策樹的各級節點上,使用信息增益方法作為屬性選擇標准,來確定生成每個節點時所采用的合適屬性 | 適用於離散的描述屬性 |
C4.5 | 使用信息增益率來選擇節點屬性,並克服ID3算法的不足 | 即適用離散的描述屬性呦適用連續的描述屬性 |
CART | 是一種有效的非參數分類和回歸方法,通過構建樹、修建樹、評估樹來構建二叉樹 | 當終結點為連續屬性時該樹為回歸樹;當終節點為分類變量時,即為分類樹 |
實例

數據總結: 屬性數據4個 = {天氣,溫度,濕度,風速}
類別2個 = {進行,取消}
1、類型信息熵
定義:所有樣本中各種類別出現的不確定性之和,根據熵的概念,熵越大,不確定性就越大。需要研究清楚信息就越多。

2、每個屬性的信息熵
每個屬性信息熵相當於一種條件熵。表示在某種屬性的條件下,各種類別出現的不確定性之和。屬性的信息熵越大,該屬性擁有的樣本類型越不“純”。

3、信息增益
信息增益 = 熵 - 條件熵(信息類別熵 - 屬性信息熵);表示信息不確定性減少的程度。若是一個屬性的信息增益越大,就表示用這個屬性進行樣本划分可以更好的減少划分后樣本的不確定性。當然,選擇該屬性就可以更快更好的完成分類目標。
信息增益的ID3算法的特征選擇指標

4.屬性分裂信息度量
通過分裂信息度量來考慮某種屬性進行分裂時分支的數量信息和尺寸信息,而這些信息稱之為屬性的內在信息。
信息增益率 = 信息增益 / 內存信息,導致屬性的重要性隨內在信息的增大而減小(換句話說:若是某個屬性本身的不確定性很大,那就不傾向選取它)。是對單純使用信息增益有所補償

5、信息增益率
IGR(天氣) = Gain(天氣) / H(天氣) = 0.246 / 1.577 = 0.155
IGR(溫度) = Gain(溫度) / H(溫度) = 0.029 / 1.556 = 0.0186
IGR(濕度) = Gain(濕度) / H(濕度) = 0.151 / 1.0 = 0.151
IGR(風速) = Gain(風速) / H(風速) = 0.048 / 0.985 = 0.048

結論

后續
信息熵:體現的是在整個樣本數據集中,結果類型或條件屬性在對應的結果集中單一事件出現不確定性的概率;而這個不確定性的結果和對應的結果類型或條件屬性存在log的聯系;信息的不確定性越大,熵的值也就越大; 針對的是一元模型的概率
-(同一結果類型記錄的個數) / (整個樣本數據結果類型記錄的總數) * log2((同一結果類型記錄的個數) / (整個樣本數據結果類型記錄的總數))
條件熵: 通過多元模型的方式來減少一元模型中不確定性,或者說降低對應的熵,越低意味着信息的不確定性就越小。
條件熵 = -某個條件屬性某個類型/總結果記錄數 * 該條件屬性某個類型的不同細分類的信息熵 之和
該條件屬性某個類型的不同細分類的信息熵 = 同個屬性不同內容類型相對結果類型的信息熵的之和