1. 程式人生 > >[機器學習]ID3決策樹 詳細計算流程 周志華機器學習 筆記 原創Excel手算方法

[機器學習]ID3決策樹 詳細計算流程 周志華機器學習 筆記 原創Excel手算方法

1.用到的主要三條熵公式:

1.1 資訊熵 詳情見夏農資訊理論 概率越平衡 事件所含有的資訊量越大

Ent(D) = -\sum_{k=1}^{\left | y \right |} p_{k}log_{2}p_{k}

1.2 條件熵 代表某一屬性下不同分類的資訊熵之和

EntCondition(D^{v}) = \sum_{v=1}^{\left | V \right |} \frac{\left |D^{v} \right |}{\left |D \right |}Ent(D^{v})

1.3 資訊增益 等於資訊熵減去條件熵,從數值上,越大的資訊增益在資訊熵一定的情況下,代表條件熵越小,條件熵越小,即該分類下的不平衡性越大

Gain(D,a) = Ent(D) - \sum_{v=1}^{\left | V \right |} \frac{\left |D^{v} \right |}{\left |D \right |}Ent(D^{v})

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:缺失值處理

強制計算存在的分類屬性資訊增益,最後把資訊增益乘以 存在的屬性數/總樣本 比例,加入了權重值。