视频作者:简博士 - 知乎;简博士的个人空间_哔哩哔哩_bilibili
链接:【合集】十分钟 机器学习 系列视频 《统计学习方法》_哔哩哔哩_bilibili
原书:《统计学习方法》李航
ID3算法
输入:训练数据集$D$,特征集$A$,阈值$\epsilon$
输出:决策树$T$
判断$T$是否需要选择特征生成决策树
- 若$D$中所有实例属于同一类$C_{k}$,则$T$为单结点树,并将类$C_{k}$作为该结点的类标记,返回$T$
例如上图,类别全为是/否
- 若$A=\varnothing$,则$T$为单节点树,并将$D$中实例数最大的类$C_{k}$作为该结点的类标记,返回$T$
例如上图,只有类别列,无其他任何特征
若不属于以上两种情况,计算特征$A$中各特征对$D$的信息增益
- 选择信息增益最大的特征$A_{g}$
例如上图,之前算出$g(D,A_{3})$最大,因此我们选择有自己的房子为根节点特征
- 如果$A_{g}$的信息增益小于阈值$\epsilon$,则置$T$为单结点树,并将$D$中实例数最大的类$C_{k}$作为该结点的类标记,返回$T$
例如,我们设$\epsilon =0.5$,由于之前计算$g(D,A_{3})=0.971-0.551=0.420$,因此我们认为该特征的分类效果并不够好,又因为该特征为最大值,因此其他特征分类效果不如该特征,所以返回树仍为单节点树
-
否则,对$A_{g}$的每一可能值$a_{i}$,依$A_{g}=a_{i}$将$D$分割为若干非空子集$D_{i}$,将$D_{i}$中是隶属最大的类作为标记,构建子结点,由结点及其子结点构成树$T$,返回$T$
-
对第$i$个子结点,以$D_{i}$为训练集,以$A-\left{A_{g}\right}$为特征集,递归的调用上述步骤,得到子树$T_{i}$,返回$T_{i}$
例:利用ID3算法建立决策树
前面我们已知知道了$g(D,A_{3})$最大,因此根节点特征为有自己的房子。图将训练数据集$D$划分为两个子集,$D_{31}=6$有自己的房子特征为是,$D_{32}=9$有自己的房子特征为否
按照上面的5. 我们选择$D_{32}$,返回1. ,显然不符合1. 2. 的要求,因此对于$D_{32}$需要从$A_{1}$年龄,$A_{2}$有工作,$A_{4}$信贷情况,通过计算信息增益,选择新特征。
我们设$D_{321}=4$为青年,$D_{322}=2$为中年,$D_{323}=3$为老年
$$
\begin{aligned}
H(D_{32})&=- \frac{6}{9}\log \frac{6}{9}- \frac{3}{9}\log \frac{3}{9}=0.918\
H(D_{32}|A_{1})&= \frac{4}{9}H(D_{321})+ \frac{2}{9}H(D_{322})+ \frac{3}{9}H(D_{323})\
H(D_{321})&= -\frac{1}{4}\log \frac{1}{4}- \frac{3}{4}\log \frac{3}{4}\
H(D_{322})&=0\
H(D_{323})&=- \frac{2}{3}\log \frac{2}{3}- \frac{1}{3}\log \frac{1}{3}\
H(D_{32}|A_{1})&=0.667\
g(D_{32}|A_{1})&=H(D_{32})-H(D_{32}|A_{2})=0.251
\end{aligned}
$$
同理对于$A_{2}$有工作,$A_{4}$信贷情况
$$
\begin{aligned}
g(D_{32},A_{2})&=H(D_{32})-H(D_{32}|A_{2})=0.918\
g(D_{32},A_{2})&=H(D_{32})-H(D_{32}|A_{3})=0.474
\end{aligned}
$$
因此我们选择信息增益最大的$A_{2}$有工作作为结点的特征。
由于$A_{2}$有两个可能的取值:一个对应"是",有3个样本,属于同一类,根据1. 要求,所以这是一个叶结点,类标记为"是";一个对应"否",同理,根据1. ,这也是一个叶结点,类标记为"否"
对于$A_{3}$另一个可能的取值"是",有6个样本,属于同一类,根据1. 要求,所以这是一个叶结点,类标记为"是"
因此生成决策树为,该决策树只用了两个特征,即有两个内部结点
C4.5算法
C4.5算法与ID3算法类似,C4.5在生成的过程中,用信息增益比来选择特征
判断$T$是否需要选择特征生成决策树
-
若$D$中所有实例属于同一类$C_{k}$,则$T$为单结点树,并将类$C_{k}$作为该结点的类标记,返回$T$
-
若$A=\varnothing$,则$T$为单节点树,并将$D$中实例数最大的类$C_{k}$作为该结点的类标记,返回$T$
若不属于以上两种情况,计算特征$A$中各特征对$D$的信息增益比
-
选择信息增益比最大的特征$A_{g}$
-
如果$A_{g}$的信息增益比小于阈值$\epsilon$,则置$T$为单结点树,并将$D$中实例数最大的类$C_{k}$作为该结点的类标记,返回$T$
-
否则,对$A_{g}$的每一可能值$a_{i}$,依$A_{g}=a_{i}$将$D$分割为若干非空子集$D_{i}$,将$D_{i}$中是隶属最大的类作为标记,构建子结点,由结点及其子结点构成树$T$,返回$T$
-
对第$i$个子结点,以$D_{i}$为训练集,以$A-\left{A_{g}\right}$为特征集,递归的调用上述步骤,得到子树$T_{i}$,返回$T_{i}$