《机器学习实战》(2)决策树小结

最近研究了决策树算法,并通过《机器学习实战》这本书学习了怎样实现决策树分类算法并可视化决策树,将自己的学习笔记加以总结,分享给大家。

一。什么是决策树?

决策树就是通过将特征对实例进行分类,我们也可以把其看成if-then规则的集合。具体学习规则是:利用训练得到的数据,根据现有的训练数据,以损失函数最小为原则,选择具体的特征来建立决策书模型,再根据现有的决策树模型对新的数据进行预测分类。

分类问题的本质就是当给定这样一个数据集后,要求我们训练出(或建立)一个模型。当出现一组新的特征向量时,要求我们预测(或判断)拥有这样一组特征向量的对象应当属于哪个类别。以一个例子来说明,假设你是一名球迷,遇见了一个新的球迷,然后你通过交谈得知他的一些特点(包括最爱的球星、喜欢的打法、喜欢的教练),然后你就要根据你已经建立好的模型来判断该病人得的到底是哪只队伍的球迷。

决策树是一种用于对实例进行分类的树形结构。决策树由节点(node)和有向边(directed edge)组成。节点的类型有两种:内部节点和叶子节点。其中,内部节点表示一个特征或属性的测试条件(用于分开具有不同特性的记录),叶子节点表示一个分类。一旦我们构造了一个决策树模型,以它为基础来进行分类将是非常容易的。具体做法是,从根节点开始,地实例的某一特征进行测试,根据测试结构将实例分配到其子节点(也就是选择适当的分支);沿着该分支可能达到叶子节点或者到达另一个内部节点时,那么就使用新的测试条件递归执行下去,直到抵达一个叶子节点。当到达叶子节点时,我们便得到了最终的分类结果。

二.计算信息熵

下面结合《机器学习实战》的相关代码对信息熵进行解释。

《机器学习实战》(2)决策树小结

在上面这段代码中,我们做了两件事,首先计算信息熵,什么是信息熵呢?通俗的讲,就是描述随即变量的混乱程度的一种度量,其公式为         《机器学习实战》(2)决策树小结

变量的不确定性越大,值就越大,我们通过第一个函数将数据集的信息计算了出来,的作用会在后面构建决策树时产生巨大作用,第二个函数构建了一个很小的数据集,这个集合便于我们对之前的函数进行验证。

《机器学习实战》(2)决策树小结

这里我们载入了之前构建的数据集,并计算了这一数据集的。在得到数据集的之后,我们就可以按照最大信息增益方法划分数据集,并度量信息增益。

三.对数据集进行划分

熵是用来描述数据集的混乱程度的,分类算法在获取了熵之后,还需要划分数据集,度量划分数据集的熵,目的是为了判断是否已经正确划分数据集。下面这个函数实现的就是对特征划分数据集。

《机器学习实战》(2)决策树小结

通过这一个函数,我们获取了按照不同特征进行划分后,获取不同划分后的数据集。

《机器学习实战》(2)决策树小结

上面两行代码就是对之前我们创建的数据集按照第一个特征不同取值进行划分后的数据集分类情况,当对第一个特征以1为划分界限划分时,留下的三个数据,当以第一个特征以0进行划分时,留下2个数据。

在获得了划分数据集的方法后,再循环计算信息熵和分离数据集函数,就可以找到最好的划分方式,其划分方法如下:

《机器学习实战》(2)决策树小结

这段代码通过对不同划分方式的信息增益进行计算,获取这些不同划分方式最大信息增益的特征位置,并返回该特征位置。

执行这段代码后,返回该数据集最合适的划分点在第一个特征处。

《机器学习实战》(2)决策树小结

上面这些就是构建一个决策树的基本要素,下面就要结合这些函数,构建一个决策树。

四.递归构建决策树

构建决树的思路是:在原始的数据集里,选择最大的信息增益来获取原始数据集的最佳切分点,并以此特征来划分数据集,第一次划分后,数据被传递到下一个节点,在该节点上再次划分数据,只有当程序遍历完所有的划分数据集的属性或者每个分支下分类相同,就可以得到叶子节点或终止块。其代码如下:

《机器学习实战》(2)决策树小结

这两个函数构成完整的ID3算法,第一个函数是多数表决函数,这个函数的作用是将出现最多的类标签返回,第二个函数四决策树构建函数,首先创建classList列表变量,包含所有的类标签,当所有数据集合里均为同一个类时,返回该类别,递归停止;当所有集合里类为空集时,递归停止;否则,递归调用决策树构建函数,划分所有类。

在我们建立的数据集里运行上述代码,得到决策树如下:

《机器学习实战》(2)决策树小结

通过上述操作,我们就学习了如何构建一个决策树模型。