详解决策树-决策树的生成ID3算法和C4.5算法【十分钟机器学习系列笔记】

68 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

视频作者:简博士 - 知乎 (zhihu.com)简博士的个人空间_哔哩哔哩_bilibili

链接:【合集】十分钟 机器学习 系列视频 《统计学习方法》_哔哩哔哩_bilibili

原书:《统计学习方法》李航

 

ID3算法

输入:训练数据集DD,特征集AA,阈值ϵ\epsilon

输出:决策树TT

 

![[附件/Pasted image 20221004110237.png|500]]

 

判断TT是否需要选择特征生成决策树

  1. DD中所有实例属于同一类CkC_{k},则TT为单结点树,并将类CkC_{k}作为该结点的类标记,返回TT

       例如上图,类别全为是/否

  1. A=A=\varnothing,则TT为单节点树,并将DD中实例数最大的类CkC_{k}作为该结点的类标记,返回TT

       例如上图,只有类别列,无其他任何特征

 

若不属于以上两种情况,计算特征AA中各特征对DD的信息增益

  1. 选择信息增益最大的特征AgA_{g}

       例如上图,之前算出g(D,A3)g(D,A_{3})最大,因此我们选择有自己的房子为根节点特征

  1. 如果AgA_{g}的信息增益小于阈值ϵ\epsilon,则置TT为单结点树,并将DD中实例数最大的类CkC_{k}作为该结点的类标记,返回TT

       例如,我们设ϵ=0.5\epsilon =0.5,由于之前计算g(D,A3)=0.9710.551=0.420g(D,A_{3})=0.971-0.551=0.420,因此我们认为该特征的分类效果并不够好,又因为该特征为最大值,因此其他特征分类效果不如该特征,所以返回树仍为单节点树

  1. 否则,对AgA_{g}的每一可能值aia_{i},依Ag=aiA_{g}=a_{i}DD分割为若干非空子集DiD_{i},将DiD_{i}中是隶属最大的类作为标记,构建子结点,由结点及其子结点构成树TT,返回TT

  2. 对第ii个子结点,以DiD_{i}为训练集,以A{Ag}A-\left\{A_{g}\right\}为特征集,递归的调用上述步骤,得到子树TiT_{i},返回TiT_{i}

 

例:利用ID3算法建立决策树

前面我们已知知道了g(D,A3)g(D,A_{3})最大,因此根节点特征为有自己的房子。图将训练数据集DD划分为两个子集,D31=6D_{31}=6有自己的房子特征为是,D32=9D_{32}=9有自己的房子特征为否

按照上面的5. 我们选择D32D_{32},返回1. ,显然不符合1. 2. 的要求,因此对于D32D_{32}需要从A1A_{1}年龄,A2A_{2}有工作,A4A_{4}信贷情况,通过计算信息增益,选择新特征。

我们设D321=4D_{321}=4为青年,D322=2D_{322}=2为中年,D323=3D_{323}=3为老年

H(D32)=69log6939log39=0.918H(D32A1)=49H(D321)+29H(D322)+39H(D323)H(D321)=14log1434log34H(D322)=0H(D323)=23log2313log13H(D32A1)=0.667g(D32A1)=H(D32)H(D32A2)=0.251 \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}

同理对于A2A_{2}有工作,A4A_{4}信贷情况

g(D32,A2)=H(D32)H(D32A2)=0.918g(D32,A2)=H(D32)H(D32A3)=0.474 \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}

因此我们选择信息增益最大的A2A_{2}有工作作为结点的特征。

由于A2A_{2}有两个可能的取值:一个对应"是",有3个样本,属于同一类,根据1. 要求,所以这是一个叶结点,类标记为"是";一个对应"否",同理,根据1. ,这也是一个叶结点,类标记为"否"

对于A3A_{3}另一个可能的取值"是",有6个样本,属于同一类,根据1. 要求,所以这是一个叶结点,类标记为"是"

因此生成决策树为,该决策树只用了两个特征,即有两个内部结点

![[附件/Pasted image 20221004153620.png|200]]

 

 

C4.5算法

C4.5算法与ID3算法类似,C4.5在生成的过程中,用信息增益比来选择特征

判断TT是否需要选择特征生成决策树

  1. DD中所有实例属于同一类CkC_{k},则TT为单结点树,并将类CkC_{k}作为该结点的类标记,返回TT

  2. A=A=\varnothing,则TT为单节点树,并将DD中实例数最大的类CkC_{k}作为该结点的类标记,返回TT

 

若不属于以上两种情况,计算特征AA中各特征对DD的信息增益比

  1. 选择信息增益比最大的特征AgA_{g}

  2. 如果AgA_{g}的信息增益比小于阈值ϵ\epsilon,则置TT为单结点树,并将DD中实例数最大的类CkC_{k}作为该结点的类标记,返回TT

  3. 否则,对AgA_{g}的每一可能值aia_{i},依Ag=aiA_{g}=a_{i}DD分割为若干非空子集DiD_{i},将DiD_{i}中是隶属最大的类作为标记,构建子结点,由结点及其子结点构成树TT,返回TT

  4. 对第ii个子结点,以DiD_{i}为训练集,以A{Ag}A-\left\{A_{g}\right\}为特征集,递归的调用上述步骤,得到子树TiT_{i},返回TiT_{i}