《机器学习实战》学习笔记-第三章-决策树

 **《机器学习实战》学习笔记:第三章-决策树
 3.1.1信息增益
 熵:表示随机变量的不确定性。
 条件熵:在一个条件下,随机变量的不确定性。
 信息增益:熵 - 条件熵
 也就是说,信息增益是一定条件下信息不确定性减少的程度
 [信息增益到底怎么理解呢?](https://www.zhihu.com/question/22104055)
 3.1.2划分数据集
 如何有效的划分数据集:总的原则是按照能够获取最大信息增益的方法来划分数据集。具体一些来说就是对按照每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式(显然,所得信息熵最大的方式是最好的方式)
 3.1.3递归构建决策树
 从数据集构造决策树算法所需要的子功能模块的工作原理如下:得到原始的数据集,然后基于最好的特征值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。因此我们可以采用递归的原则处理数据集。
 递归结束的条件是:程序遍历完所有划分数据集的特征值,或者每个分支下的所有实例都具有相同的分类。如果所有实例具有相同的分类,则得到一个叶子节点或者终止块。任何到达叶子节点的数据必然属于叶子节点的分类。本算法在具体实施时只需要在算法开始运行前计算列的数目,查看算法是否使用了所有属性即可。如果数据集已经处理了所有属性,但是类标签已然不是唯一的,此时我们需要决定如何定义该叶子节点,在这种情况下我们通常会使用多数表决的方法决定该叶子节点的分类。注意,本算法使用python中的字典类型存储树的信息。
 3.2使用Matplotlib注解绘制树形图
 略
 3.3测试和存储分类器
 3.3.1测试算法:使用决策树执行分类
 依靠训练数据构造决策树之后,我们可以将它用于实际数据的分类。在执行数据分类时,需要使用决策树以及用于构造决策树的标签向量。之后,程序比较测试数据与决策树上的数值,递归执行该分类过程直至进入叶子节点;最后将测试数据定义为叶子节点所属的类型。
 3.3.2使用算法:预先存储好决策树
 使用python的pickle模块序列化决策树,将其保存在磁盘上,需要的时候将已经构造好的决策树从磁盘上读取出来即可。能够将分类器存储在磁盘上,而不用每次对数据分类时重新学习一遍,这也是决策树的优点之一,像k-近邻算法就无法持久化分类器。此外,我们可以预先提炼并存储数据集中包含的知识信息,在需要对数据进行分类时再使用这些知识。
 3.4示例:使用决策树预测隐形眼镜类型
 (一).基本步骤:
 1.收集数据
 2.准备数据:解析tab键分割的数据行
 3.分析数据:快速检查数据,确保正确地解析数据内容,使用createPlot()函数画出最终的树形图
 4.训练算法:使用createTree()函数
 5.测试算法:编写测试函数验证决策树可以正确地分类所给的数据实例
 6.使用算法:存储树的结构,以便下次使用时无需重新构造树
 (二).需要注意的细节:
 1.过度拟合问题:[机器学习中的过拟合与防止过拟合](http://blog.csdn.net/yang090510118/article/details/39456205)     
 2.本章使用的是ID3算法,这是一个好算法但还有不足之处。ID3算法无法直接处理数值型数据,尽管我们可以通过量化的方法将数值型数据转化为标称型数据,但是如果存在太多的特征划分,ID3算法仍然会面临其他问题。因此后续将会学习到另一个决策树构造算法CART
 3.5本章小结:
 决策树分类器就像带有终止块的流程图,终止块表示分类结果。开始处理数据时,首先要测量集合中数据的不一致性,也就是熵,然后寻找使得信息熵最大的方案划分数据集,直到数据集中的所有数据属于同一分类。构建决策树时采用递归的方法将数据集转化为决策树。一般我们使用字典这一Python内嵌的数据结构来存储树节点信息。

猜你喜欢

转载自blog.csdn.net/qq_33904512/article/details/76599405