基于《机器学习实战》理解并尝试决策树的实现。
目录
一、理解决策树
我们在日常生活中有时会遇到一些决策,做出不同的决策就应对着不同的结果。比如我们在回家时,是面临选择坐公交车,还是打车,做出选择时还需考虑自己的经济能力以及路途远近等因素。决策树就是在这样一种情形下诞生的。下面是决策树的一个模板
二、理解信息增益
上面提到,我们在回家要乘坐什么交通工具的时候,会依据自身经济能力以及路途远近等因素来考量,那么哪一个因素对于决策的影响更大,就需要应用信息增益来划分数据集。
划分数据集的大原则是:将无序数据变得更加有序,但是各种方法都有各自的优缺点。在划分数据集前后信息发生的变化称为信息增益,获得信息增益最高的特征就是最好的选择,所以必须先学习如何计算信息增益,集合信息的度量方式称为香农熵,或者简称熵。
熵定义为信息的期望值,在明晰这个概念之前,我们必须知道信息的定义。如果待分类的事务可能划分在多个分类之中,则符号xi的定义为:
其中p(xi)是选择该分类的概率
为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,通过下面公式得到
书上还介绍另一种基尼不纯度,但是本次实验中不使用基尼不纯度方法,故不介绍
得到熵之后,我们就可以按照获取最大信息增益的方法划分数据集。
三、构建决策树
在了解了以最大信息增益的方式划分数据集后,我们就可以构建决策树了,构造流程如下:首先遍历整个数据集,计算每一个特征的香农熵,之后在按香农熵最大的划分数据集,之后得到若干个划分后的数据集,在对划分后的数据集计算香农熵,再按香农熵最大的划分数据集,以此类推,直到遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类,这样,程序便终止了。
但是世上万物都不可能是绝对的,数据集中的有些数据并不会完全符合预期,比如,你身上有足够的钱,并且回家的路途也很遥远,但是你也愿意骑共享单车回家,所以,在实际运用中,我们会多采用多数表决的方法决定叶子结点的分类
本次实验中,决策树是以字典集的方式呈现的,树的分支是以嵌套字典的形式展现。
每次下课,同学们的第一件事就是会问朋友们去哪吃,以此列出以下四个特征:
'外出意愿':0代表不想外出,1代表可以外出
'生活费是否充足 ':0代表生活费不充足,1代表生活费充足
' 饱腹程度':0代表饿,1代表不是很饿
'时间是否充足 ':0代表有时间,1代表没时间
外出意愿 | 生活费是否充足 | 饱腹程度 | 时间是否充足 | 结论 |
0 | 0 | 0 | 0 | 食堂 |
0 | 0 | 0 | 1 | 食堂 |
0 | 0 | 1 | 0 | 食堂 |
0 | 0 | 1 | 1 | 西餐厅 |
0 | 1 | 0 | 0 | 食堂 |
0 | 1 | 0 | 1 | 自助 |
0 | 1 | 1 | 0 | 食堂 |