持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
视频作者:简博士 - 知乎 (zhihu.com);简博士的个人空间_哔哩哔哩_bilibili
链接:【合集】十分钟 机器学习 系列视频 《统计学习方法》_哔哩哔哩_bilibili
原书:《统计学习方法》李航
ID3算法
输入:训练数据集D,特征集A,阈值ϵ
输出:决策树T
![![[附件/Pasted image 20221004110237.png|500]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e0bd3b1f060142cf81f7fc3ff0648c5d~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp)
判断T是否需要选择特征生成决策树
- 若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T
例如上图,类别全为是/否
- 若A=∅,则T为单节点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
例如上图,只有类别列,无其他任何特征
若不属于以上两种情况,计算特征A中各特征对D的信息增益
- 选择信息增益最大的特征Ag
例如上图,之前算出g(D,A3)最大,因此我们选择有自己的房子为根节点特征
- 如果Ag的信息增益小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
例如,我们设ϵ=0.5,由于之前计算g(D,A3)=0.971−0.551=0.420,因此我们认为该特征的分类效果并不够好,又因为该特征为最大值,因此其他特征分类效果不如该特征,所以返回树仍为单节点树
-
否则,对Ag的每一可能值ai,依Ag=ai将D分割为若干非空子集Di,将Di中是隶属最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T
-
对第i个子结点,以Di为训练集,以A−{Ag}为特征集,递归的调用上述步骤,得到子树Ti,返回Ti
例:利用ID3算法建立决策树
前面我们已知知道了g(D,A3)最大,因此根节点特征为有自己的房子。图将训练数据集D划分为两个子集,D31=6有自己的房子特征为是,D32=9有自己的房子特征为否
按照上面的5. 我们选择D32,返回1. ,显然不符合1. 2. 的要求,因此对于D32需要从A1年龄,A2有工作,A4信贷情况,通过计算信息增益,选择新特征。
我们设D321=4为青年,D322=2为中年,D323=3为老年
H(D32)H(D32∣A1)H(D321)H(D322)H(D323)H(D32∣A1)g(D32∣A1)=−96log96−93log93=0.918=94H(D321)+92H(D322)+93H(D323)=−41log41−43log43=0=−32log32−31log31=0.667=H(D32)−H(D32∣A2)=0.251
同理对于A2有工作,A4信贷情况
g(D32,A2)g(D32,A2)=H(D32)−H(D32∣A2)=0.918=H(D32)−H(D32∣A3)=0.474
因此我们选择信息增益最大的A2有工作作为结点的特征。
由于A2有两个可能的取值:一个对应"是",有3个样本,属于同一类,根据1. 要求,所以这是一个叶结点,类标记为"是";一个对应"否",同理,根据1. ,这也是一个叶结点,类标记为"否"
对于A3另一个可能的取值"是",有6个样本,属于同一类,根据1. 要求,所以这是一个叶结点,类标记为"是"
因此生成决策树为,该决策树只用了两个特征,即有两个内部结点
![![[附件/Pasted image 20221004153620.png|200]]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d7f7581b0ba0422a9b6f249fcde2ddba~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp)
C4.5算法
C4.5算法与ID3算法类似,C4.5在生成的过程中,用信息增益比来选择特征
判断T是否需要选择特征生成决策树
-
若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T
-
若A=∅,则T为单节点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
若不属于以上两种情况,计算特征A中各特征对D的信息增益比
-
选择信息增益比最大的特征Ag
-
如果Ag的信息增益比小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
-
否则,对Ag的每一可能值ai,依Ag=ai将D分割为若干非空子集Di,将Di中是隶属最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T
-
对第i个子结点,以Di为训练集,以A−{Ag}为特征集,递归的调用上述步骤,得到子树Ti,返回Ti