[機器學習]ID3決策樹 詳細計算流程 周志華機器學習 筆記 原創Excel手算方法
1.用到的主要三條熵公式:
1.1 資訊熵 詳情見夏農資訊理論 概率越平衡 事件所含有的資訊量越大
1.2 條件熵 代表某一屬性下不同分類的資訊熵之和
1.3 資訊增益 等於資訊熵減去條件熵,從數值上,越大的資訊增益在資訊熵一定的情況下,代表條件熵越小,條件熵越小,即該分類下的不平衡性越大
2.西瓜資料集2.0的詳細手算結點劃分 原創的Excel方法
zhonglihao 即本人原創的這個excel計算方法適合初學者理解計算過程,不會迷糊
西瓜資料集2.0 (版權來自 周志華教授-《機器學習》)
表1 | |||||||
編號 | 色澤 | 根蒂 | 敲聲 | 紋理 | 肚臍 |
觸感 | 好瓜 |
1 | 青綠 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 烏黑 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 烏黑 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 青綠 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | 淺白 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青綠 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 是 |
7 | 烏黑 | 稍蜷 | 濁響 |
稍糊 | 稍凹 | 軟粘 | 是 |
8 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 硬滑 | 是 |
9 | 烏黑 | 稍蜷 | 沉悶 | 稍糊 | 稍凹 | 硬滑 | 否 |
10 | 青綠 | 硬挺 | 清脆 | 清晰 | 平坦 | 軟粘 | 否 |
11 | 淺白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
12 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 軟粘 | 否 |
13 | 青綠 | 稍蜷 | 濁響 | 稍糊 | 凹陷 | 硬滑 | 否 |
14 |
淺白 | 稍蜷 | 沉悶 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 否 |
16 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 硬滑 | 否 |
17 | 青綠 | 蜷縮 | 沉悶 | 稍糊 | 稍凹 | 硬滑 | 否 |
step 1 首先,統計每個屬性下的分類計數,計算完可驗證一下是否加起來的和等於17:
表2 | |||||
屬性計數表 | |||||
色澤 | 根蒂 | 敲聲 | 紋理 | 肚臍 | 觸感 |
青綠 = 6 | 蜷縮 = 8 | 沉悶 = 5 | 清晰 = 9 | 凹陷 = 7 | 硬滑 = 12 |
烏黑 = 6 | 稍蜷 = 7 | 濁響 = 10 | 稍糊 = 5 | 稍凹 = 6 | 軟粘 = 5 |
淺白 = 5 | 硬挺 = 2 | 清脆 = 2 | 模糊 = 3 | 平坦 = 4 |
step 2 然後,在分類下統計該分類的正例(是好瓜)和反例(不是好瓜)的計數,通過加起來確定是否等於屬性分類的計數:
這樣我們就可以去計算條件熵了
表3 | |||||
屬性子分類標籤計數(是否好瓜 是:否) | |||||
色澤 | 根蒂 | 敲聲 | 紋理 | 肚臍 | 觸感 |
青綠 6 = 3:3 |
蜷縮 8 = 5:3 |
沉悶 5 = 2:3 |
清晰 9 = 7:2 |
凹陷 7 = 5:2 |
硬滑 12 = 6:6 |
烏黑 6 = 4:2 |
稍蜷 7 = 3:4 |
濁響 10 = 6:4 |
稍糊 5 = 1:4 |
稍凹 6 = 3:3 |
軟粘 5 = 2:3 |
淺白 5 = 1:4 |
硬挺 2 = 0:2 |
清脆 2 = 0:2 |
模糊 3 = 0:3 |
平坦 4 = 0:4 |
step 3 通過上表先計算每一個屬性分類的資訊熵(公式1),若資訊熵中有正例或反例為0,則整個資訊熵公式的計算值為0,可以對比一下上表和下表的值:
表4 | |||||
計算屬性下單個分類的資訊熵 | |||||
色澤 | 根蒂 | 敲聲 | 紋理 | 肚臍 | 觸感 |
青綠 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 |
烏黑 | 稍蜷 | 濁響 | 稍糊 | 稍凹 | 軟粘 |
淺白 | 硬挺 | 清脆 | 模糊 | 平坦 | |
1 | 0.954434003 | 0.970950594 | 0.764204507 | 0.863120569 | 1 |
0.918295834 | 0.985228136 | 0.970950594 | 0.721928095 | 1 | 0.970950594 |
0.721928095 | 0 | 0 | 0 | 0 |
step 4 根據條件熵公式 計算每個屬性分類在該屬性中的比例 如青綠分類所示為6個青綠分類除以17個樣本,其餘的計算雷同:
表5 | |||||
計算屬性下分類除以所有樣本的比例 | |||||
色澤 | 根蒂 | 敲聲 | 紋理 | 肚臍 | 觸感 |
青綠 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 |
烏黑 | 稍蜷 | 濁響 | 稍糊 | 稍凹 | 軟粘 |
淺白 | 硬挺 | 清脆 | 模糊 | 平坦 | |
6/17 = 0.352941176 | 0.470588235 | 0.294117647 | 0.529411765 | 0.411764706 | 0.705882353 |
0.352941176 | 0.411764706 | 0.588235294 | 0.294117647 | 0.352941176 | 0.294117647 |
0.294117647 | 0.117647059 | 0.117647059 | 0.176470588 | 0.235294118 |
step 5 將表5和表4的分類屬性進行乘加運算即可得到 屬性下的條件熵:
例如 條件熵(色澤) = 1 * 0.352941176 + 0.918295834 * 0.352941176 + 0.721928095 * 0.294117647 = 0.889
表6 | |||||
計算條件熵 | |||||
色澤 | 根蒂 | 敲聲 | 紋理 | 肚臍 | 觸感 |
0.889377381 | 0.854827587 | 0.856721113 | 0.616910649 | 0.708343764 | 0.991456057 |
step 6 回到西瓜資料表1,我們可以知道整個表的正反例的資訊熵是
Ent = -((8/17)*log2(8/17) + (8/17)*log2(8/17))= 0.998
step 7 利用全域性資訊熵減去表6中每一個屬性的條件熵得到 該屬性的資訊增益:
表7 | |||||
計算資訊增益 | |||||
色澤 | 根蒂 | 敲聲 | 紋理 | 肚臍 | 觸感 |
0.108622619 | 0.143172413 | 0.141278887 | 0.381089351 | 0.289656236 | 0.006543943 |
如表7所示,可以得到每個屬性的資訊增益了,資訊增益最大的屬性將被用於作為這一層的結點,所以我們選擇紋理!紋理!紋理!重要的事情說三十遍作為第一個結點,其餘結點的計算雷同,把紋理屬性去掉後,依照上述流程再做就可以了,不囉嗦。
觀察數值可知此Excel計算得出的數值與周志華機器學習中的數值一致,整個計算過程也比較容易理解,不容易出錯。
3.筆記1:為什麼ID3要選擇資訊增益這個指標呢?
zhonglihao的定性回答:從第一層結點最終選擇屬性紋理可知,紋理屬性中 的三個分類 的正反例基本都是最不平衡的,意味著選擇紋理作為結點能夠儘可能減少往後結點的判斷數,減少分支和深度,使得整顆決策樹的分類效率達到最大,大概是這麼一回事,也是資訊增益計算的初衷吧。
4.筆記2:剪枝處理
*剪枝處理有助於提升決策樹的泛化能力
在未剪枝前先計算 驗證集的分類準確率 a,然後對某一結點進行裁剪,並把該結點固定為一個分類,觀察剪枝後 驗證集的準確率是否有上升,若變好則確定裁剪,若變差,則保留該結點。
5.筆記3:連續值處理
對連續值進行排序後,於某一點割裂兩邊,並計算二分後的資訊增益,取資訊增益最大的分割點作為不等式判決值。
6.筆記4:缺失值處理
強制計算存在的分類屬性資訊增益,最後把資訊增益乘以 存在的屬性數/總樣本 比例,加入了權重值。