常用的决策树算法有ID3、C4.5、CART,它们构建树所使用的启发式函数各是什么?除了构建准则之外,它们之间的区别与联系是什么?首先,我们回顾一下这几种决策树构造时使用的准则。
人 | 年龄 | 长相 | 工资 | 写代码 | 类别 |
---|---|---|---|---|---|
小A | 老 | 帅 | 高 | 不会 | 不见 |
小B | 年轻 | 一般 | 中等 | 会 | 见 |
小C | 年轻 | 丑 | 高 | 不会 | 不见 |
小D | 年轻 | 一般 | 高 | 会 | 见 |
小L | 年轻 | 一般 | 低 | 不会 | 不见 |
ID3: 最大信息增益
信息增益 = 经验熵-经验条件熵
(D):样本集合;(K):类别数
经验熵:
[H(D) = -sum_{k=1}^K frac{|C_k|}{|D|} ext{log}_2frac{|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|} ext{log}_2frac{|C_k|}{|D|}
ight)
]
示例:
- Step1:计算经验熵
总共D=5,不见:3,见:2
[H(D)=-frac{3}{5} log_2frac{3}{5}-frac{2}{5} log_2frac{2}{5}=0.971
]
- Step2. 计算经验条件熵
[egin{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}
ight)=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}
ight)+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}
ight)+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. 计算信息增益
[egin{aligned}
&g(D,年龄) = 0.171,g(D,长相)=0.42 \
&g(D,工资) = 0.42,g(D,写代码)=0.971
end{aligned}
]
ID3只能用于离散型变量.
C4.5:最大信息增益比
特征A对于数据集D的信息增益比定义为:
[ ext{g}_R(D, A)=frac{ ext{g}(D, A)}{H_A(D)}
]
其中:
[H_A(D) = -sum_{i=1}^K frac{|D_i|}{|D|} ext{log}_2frac{|D_i|}{|D|}
]
CART:最大基尼指数
CART是指分类与回归树,而前两种只能用做分类.
Gini描述的是数据的纯度,和信息熵类似。
[ ext{Gini}(D) = 1-sum_{k=1}^n left(frac{|C_k|}{|D|}
ight)
]
CART在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。CART是一棵二叉树。特征A的Gini指数定义为:
[ ext{Gini}(D|A)=sum_{i=1}^nleft(frac{|D_i|}{|D|}
ight) ext{Gini}(D_i)
]
根据式(3.24)可计算出各个特征的Gini指数为
[egin{aligned}
& ext{Gini}(D| ext{年龄=老})=0.4, \
& ext{Gini}(D| ext{年龄=年轻})=0.4,\
& ext{Gini}(D| ext{长相=帅})=0.4, ext{Gini}(D| ext{长相=丑})=0.4,\
& ext{Gini}(D| ext{写代码=会})=0, ext{Gini}(D| ext{写代码=不会})=0,\
& ext{Gini}(D| ext{工资=高})=0.47, ext{Gini}(D| ext{工资=中等})=0.3,\
& ext{Gini}(D| ext{工资=低})=0.4
end{aligned}
]