拟解决基本问题描述数据准备与数据预处理数据可视化模型基本原理与算法实现测试方法与结果总结参考文献
拟解决基本问题描述
本文拟解决预测隐形眼镜类型的问题,决策树是概念学习的一种模型和学习算法,所谓概念学习可以看成是一个搜索过程,搜索的范围是假设定义的空间,搜索的目标是寻找能更好得拟合训练样例的假设。决策树希望通过构造一种IF-THEN的规则的集合,来对离散值数据进行分类。决策树模型是一种监督学习,训练样例是包含特征和类别,每个特征的取值是离散的,类别也是离散的。
例如隐形眼镜分类问题,隐形眼镜的数据集合中,有四个特征分别为患者年龄、眼睛处方、是否散光、眼泪分泌率,三个类别分别为硬型、软型和不适合佩戴。决策树模型是判别模型,通过直接生成后验概率分布作为判别条件进行分类。
数据准备与数据预处理
数据准备
数据来源于隐形眼镜数据集,它包含很多患者眼部状况的观察条件以及医生推荐的眼睛类型。隐形眼镜类型包括硬材质、软材质以及不适合佩戴隐形眼镜。
数据预处理
解析tab键分割的数据行。对数据进行预处理,将文本文件中数据中的用来隔开数据的空格删除,替换为换行符。
数据可视化
由于字典的表示形式非常不易于理解。而且直接绘制图形也比较困难,本文将使用Matplotlib库创建树形图,它可以对文字着色并提供多种形状以供选择,还可以反转箭头。
使用文本注解绘制树节点,此函数可以绘制树节点。
绘制一棵完整的树需要知道有多少个叶节点,以便可以正确确定 轴的长度;还需知道树有多少层,以便可以正确确定 轴的高度。本文定义两个函数来获取叶节点的数目和树的层数。
函数createPlot()是使用的主函数,它调用了plotTree(),函数plotTree又依次调用决策数所需的函数,函数createPlot(),它创建绘图区,计算树形图的全局尺寸,并调用递归函数plotTree()。
最后可绘制树形图,可将此决策树可视化。
模型基本原理与算法实现
划分数据集的大原则是:将无序的数据变得更加有序,可以使用信息论度量信息。在划分数据集前后信息发生的变化称为信息增益,知道如何计算信息增益,就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。
熵定义为信息的期望值,符号 的信息定义为
l(xi)=−log2p(xi) l ( x i ) = − l o g 2 p ( x i )
其中
p(xi) p ( x i ) 是选择该分类的概率。
为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,通过下面的公式得到
H=−∑i=1np(xi)log2p(xi) H = − ∑ i = 1 n p ( x i ) l o g 2 p ( x i )
其中n是分类的数目。
计算给定数据集的香农熵
熵越高,则混合的数据也越多,得到熵之后,我们就可以按照获取最大信息增益的方法划分数据集。度量划分数据集的熵,以便判断当前是否正确地划分了数据集。对每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式。
然后需要遍历整个数据集,循环计算香农熵和splitDataSet()函数,找到最好的特征划分方式。熵计算将会告诉我们如何划分数据集是最好的数据组织方式。
当这些从数据集构造决策树算法所需要的子功能模块构建好后,得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个点上,我们可以再次划分数据。因此采用递归的原则处理数据集。
测试方法与结果
为了测试此决策树对数据的预测,由于原始数据较少,并且没有测试数据,所以本文采用隐形眼镜数据集的其中一条作为测试数据,剩余的数据作为训练数据。
在进行24次不同的训练和测试后,结果有17次测试数据的预测类型与标签相同。
总结
决策树算法的优点:
1:理解和解释起来简单,且决策树模型可以想象
2:需要准备的数据量不大,而其他的技术往往需要很大的数据集,需要创建虚拟变量,去除不完整的数据,但是该算法对于丢失的数据不能进行准确的预测
3:决策树算法的时间复杂度(即预测数据)是用于训练决策树的数据点的对数
4:能够处理数字和数据的类别(需要做相应的转变),而其他算法分析的数据集往往是只有一种类型的变量
5:能够处理多输出的问题
决策树算法的缺点:
1:决策树算法学习者可以创建复杂的树,但是没有推广依据,这就是所谓的过拟合,为了避免这种问题,出现了剪枝的概念,即设置一个叶子结点所需要的最小数目或者设置树的最大深度
2:决策树的结果可能是不稳定的,因为在数据中一个很小的变化可能导致生成一个完全不同的树,这个问题可以通过使用集成决策树来解决
3:这里有一些概念是很难的理解的,因为决策树本身并不难很轻易的表达它们,比如说异或校验或复用的问题。
本文针对预测隐形眼镜类型进行了计算,运用决策树的方法进行了预测,对决策树进行了深入的学习,进行了24次不同的训练和测试后,结果有17次测试数据的预测类型与标签相同。此结果的原因可能有训练数据较少的原因。通过对本章的学习,对此算法了解更加深入了,但也发现了自身的不足,在python语言的实现上仍有很大的不足,大部分依靠书中及网上的资源,还需继续努力学习。
参考文献
[1]《机器学习实战》