常用的決策樹算法有ID3、C4.5、CART,它們構建樹所使用的啟發式函數各是什么?除了構建准則之外,它們之間的區別與聯系是什么?首先,我們回顧一下這幾種決策樹構造時使用的准則。
人 | 年齡 | 長相 | 工資 | 寫代碼 | 類別 |
---|---|---|---|---|---|
小A | 老 | 帥 | 高 | 不會 | 不見 |
小B | 年輕 | 一般 | 中等 | 會 | 見 |
小C | 年輕 | 丑 | 高 | 不會 | 不見 |
小D | 年輕 | 一般 | 高 | 會 | 見 |
小L | 年輕 | 一般 | 低 | 不會 | 不見 |
ID3: 最大信息增益
信息增益 = 經驗熵-經驗條件熵
\(D\):樣本集合;\(K\):類別數
經驗熵:
\[H(D) = -\sum_{k=1}^K \frac{|C_k|}{|D|} \text{log}_2\frac{|C_k|}{|D|} \]
經驗條件熵:
\[H(D|A)=\sum_{i=1}^n \frac{|D_i|}{|D|} H(D_i)=\sum_{i=1}^n \frac{|D_i|}{|D|}\left(-\sum_{k=1}^K \frac{|C_k|}{|D|} \text{log}_2\frac{|C_k|}{|D|}\right) \]
示例:
- Step1:計算經驗熵
總共D=5,不見:3,見:2
\[H(D)=-\frac{3}{5} \log_2\frac{3}{5}-\frac{2}{5} \log_2\frac{2}{5}=0.971 \]
- Step2. 計算經驗條件熵
\[\begin{aligned} &H(D|年齡) = \frac{1}{5}H(老)+\frac{4}{5}H(年輕)=\frac{1}{5}(-0)+\frac{4}{5}\left(-\frac{2}{4} \log _{2} \frac{2}{4}-\frac{2}{4} \log _{2} \frac{2}{4}\right)=0.8 \\ &H(D|長相) = \frac{1}{5}H(帥)+\frac{3}{5}H(一般)+\frac{1}{5}H(丑)=0+\frac{3}{5}\left(-\frac{2}{3} \log _{2} \frac{2}{3}-\frac{1}{3} \log _{2} \frac{1}{3}\right)+0=0.551 \\ &H(D|工資) = \frac{3}{5}H(高)+\frac{1}{5}H(中等)+\frac{1}{5}H(低)=\frac{3}{5}\left(-\frac{2}{3} \log _{2} \frac{2}{3}-\frac{1}{3} \log _{2} \frac{1}{3}\right)+0+0=0.551 \\ &H(D|寫代碼)=\frac{3}{5}H(不會)+\frac{2}{5}H(會)=\frac{3}{5}(0)+\frac{2}{5}(0)=0 \end{aligned} \]
- Step3. 計算信息增益
\[\begin{aligned} &g(D,年齡) = 0.171,g(D,長相)=0.42 \\ &g(D,工資) = 0.42,g(D,寫代碼)=0.971 \end{aligned} \]
ID3只能用於離散型變量.
C4.5:最大信息增益比
特征A對於數據集D的信息增益比定義為:
\[\text{g}_R(D, A)=\frac{\text{g}(D, A)}{H_A(D)} \]
其中:
\[H_A(D) = -\sum_{i=1}^K \frac{|D_i|}{|D|} \text{log}_2\frac{|D_i|}{|D|} \]
CART:最大基尼指數
CART是指分類與回歸樹,而前兩種只能用做分類.
Gini描述的是數據的純度,和信息熵類似。
\[\text{Gini}(D) = 1-\sum_{k=1}^n \left(\frac{|C_k|}{|D|}\right) \]
CART在每一次迭代中選擇基尼指數最小的特征及其對應的切分點進行分類。CART是一棵二叉樹。特征A的Gini指數定義為:
\[\text{Gini}(D|A)=\sum_{i=1}^n\left(\frac{|D_i|}{|D|}\right)\text{Gini}(D_i) \]
根據式(3.24)可計算出各個特征的Gini指數為
\[\begin{aligned} &\text{Gini}(D|\text{年齡=老})=0.4, \\ &\text{Gini}(D|\text{年齡=年輕})=0.4,\\ &\text{Gini}(D|\text{長相=帥})=0.4,\text{Gini}(D|\text{長相=丑})=0.4,\\ &\text{Gini}(D|\text{寫代碼=會})=0,\text{Gini}(D|\text{寫代碼=不會})=0,\\ &\text{Gini}(D|\text{工資=高})=0.47,\text{Gini}(D|\text{工資=中等})=0.3,\\ &\text{Gini}(D|\text{工資=低})=0.4 \end{aligned} \]