参考博客:决策树实战篇之为自己配个隐形眼镜 (po主Jack-Cui,《——大部分内容转载自
参考书籍:《机器学习实战》——第三章
目录
一 构建决策树
依旧是用贷款demo,数据如下
本章使用ID3算法进行决策树划分,每次划分消耗一个特征属性。
1.1 决策树构建原理
决策树构建工作原理:从原始数据集开始,基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据集被向下传递到树的分支的下一个结点。在这个结点上,我们可以再次划分数据。因此我们可以采用递归的原则处理数据集。
使用ID3算法的核心是在决策树各个结点上对应信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择。
递归创建决策树时,递归有两个终止条件:第一个停止条件是所有的类标签完全相同,则直接返回该类标签;第二个停止条件是使用完了所有特征,仍然不能将数据划分仅包含唯一类别的分组,即决策树构建失败,特征不够用。此时说明数据纬度不够,由于第二个停止条件无法简单地返回唯一的类标签,通常采用多数表决即挑选出现数量最多的类别作为返回值。
根据该构建原理对贷款demo进行数据集划分,从上篇我们知道根的信息增益最大是“是否有房”特征属性,根据这个属性可以划分2个数据集D1、D2如下,且D1数据集中的贷款类别全为“是”,即全为同一类,该数据集结点即可停止划分。
1.2 决策树结构
贷款demo的信息增益计算过程如下,前4行为第一次划分数据集,信息增益最高为第3个,取为根节点,删除该特征后再次计算,得到第2个特征信息增益最高,取为第二个划分特征。
可以知道第一个划分特征为“有自己的房子”,第二个划分特征为“有工作” ,且划分之后子集正好都是同一类,即终止节点。故决策树构建完成如下:
使用字典存储决策树结构,如
{'有自己的房子': {0: {'有工作': {0: 'no', 1: 'yes'}}, 1: 'yes'}}
字典关键字(key)‘有自己的房子’是第一个划分数据集的特征名称,它的值(value)是另一个字典。value要么是类标签,要么是另一个字典。如果值是类标签则该子节点是叶子节点;如果值是另一个字典,则子节点是一个判读节点,这种格式不断重复构成了整棵树。
1.3决策树构建关键代码
(这部分代码解析来自po主Jack-Cui,写的很详细 我就扣过来了)