《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型


拟解决基本问题描述

本文拟解决预测隐形眼镜类型的问题,决策树是概念学习的一种模型和学习算法,所谓概念学习可以看成是一个搜索过程,搜索的范围是假设定义的空间,搜索的目标是寻找能更好得拟合训练样例的假设。决策树希望通过构造一种IF-THEN的规则的集合,来对离散值数据进行分类。决策树模型是一种监督学习,训练样例是包含特征和类别,每个特征的取值是离散的,类别也是离散的。
例如隐形眼镜分类问题,隐形眼镜的数据集合中,有四个特征分别为患者年龄、眼睛处方、是否散光、眼泪分泌率,三个类别分别为硬型、软型和不适合佩戴。决策树模型是判别模型,通过直接生成后验概率分布作为判别条件进行分类。

数据准备与数据预处理

数据准备

数据来源于隐形眼镜数据集,它包含很多患者眼部状况的观察条件以及医生推荐的眼睛类型。隐形眼镜类型包括硬材质、软材质以及不适合佩戴隐形眼镜。

数据预处理

解析tab键分割的数据行。对数据进行预处理,将文本文件中数据中的用来隔开数据的空格删除,替换为换行符。

数据可视化

由于字典的表示形式非常不易于理解。而且直接绘制图形也比较困难,本文将使用Matplotlib库创建树形图,它可以对文字着色并提供多种形状以供选择,还可以反转箭头。
使用文本注解绘制树节点,此函数可以绘制树节点。

《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型

《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型

绘制一棵完整的树需要知道有多少个叶节点,以便可以正确确定 轴的长度;还需知道树有多少层,以便可以正确确定 轴的高度。本文定义两个函数来获取叶节点的数目和树的层数。

《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型

函数createPlot()是使用的主函数,它调用了plotTree(),函数plotTree又依次调用决策数所需的函数,函数createPlot(),它创建绘图区,计算树形图的全局尺寸,并调用递归函数plotTree()。

《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型

最后可绘制树形图,可将此决策树可视化。

《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型

模型基本原理与算法实现

划分数据集的大原则是:将无序的数据变得更加有序,可以使用信息论度量信息。在划分数据集前后信息发生的变化称为信息增益,知道如何计算信息增益,就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。
熵定义为信息的期望值,符号 的信息定义为

l(xi)=log2p(xi)

其中

p(xi)
是选择该分类的概率。

为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,通过下面的公式得到

H=i=1np(xi)log2p(xi)

其中n是分类的数目。
计算给定数据集的香农熵

《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型

熵越高,则混合的数据也越多,得到熵之后,我们就可以按照获取最大信息增益的方法划分数据集。度量划分数据集的熵,以便判断当前是否正确地划分了数据集。对每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式。

《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型

然后需要遍历整个数据集,循环计算香农熵和splitDataSet()函数,找到最好的特征划分方式。熵计算将会告诉我们如何划分数据集是最好的数据组织方式。

当这些从数据集构造决策树算法所需要的子功能模块构建好后,得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个点上,我们可以再次划分数据。因此采用递归的原则处理数据集。

测试方法与结果

为了测试此决策树对数据的预测,由于原始数据较少,并且没有测试数据,所以本文采用隐形眼镜数据集的其中一条作为测试数据,剩余的数据作为训练数据。

《机器学习实战》学习笔记———使用决策树预测隐形眼镜类型

在进行24次不同的训练和测试后,结果有17次测试数据的预测类型与标签相同。

总结

决策树算法的优点:
1:理解和解释起来简单,且决策树模型可以想象
2:需要准备的数据量不大,而其他的技术往往需要很大的数据集,需要创建虚拟变量,去除不完整的数据,但是该算法对于丢失的数据不能进行准确的预测
3:决策树算法的时间复杂度(即预测数据)是用于训练决策树的数据点的对数
4:能够处理数字和数据的类别(需要做相应的转变),而其他算法分析的数据集往往是只有一种类型的变量
5:能够处理多输出的问题
决策树算法的缺点:
1:决策树算法学习者可以创建复杂的树,但是没有推广依据,这就是所谓的过拟合,为了避免这种问题,出现了剪枝的概念,即设置一个叶子结点所需要的最小数目或者设置树的最大深度
2:决策树的结果可能是不稳定的,因为在数据中一个很小的变化可能导致生成一个完全不同的树,这个问题可以通过使用集成决策树来解决
3:这里有一些概念是很难的理解的,因为决策树本身并不难很轻易的表达它们,比如说异或校验或复用的问题。
本文针对预测隐形眼镜类型进行了计算,运用决策树的方法进行了预测,对决策树进行了深入的学习,进行了24次不同的训练和测试后,结果有17次测试数据的预测类型与标签相同。此结果的原因可能有训练数据较少的原因。通过对本章的学习,对此算法了解更加深入了,但也发现了自身的不足,在python语言的实现上仍有很大的不足,大部分依靠书中及网上的资源,还需继续努力学习。


参考文献

[1]《机器学习实战》