Python3《机器学习实战》02:决策树

运行平台: Windows
Python版本: Python3
IDE: Anaconda3

  • 1 决策树简介
  • 2 基于信息熵的特征选择
  • 3 决策树的构造
  • 4 决策树的修剪
  • 5 完整代码及详细注释


1 决策树简介

决策树(decision tree)的一个重要任务就是为了理解数据中所蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,这些机器根据数据集创建规则的过程,就是机器学习过程。

决策树是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。

决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。

  • 适用数据类型:数值型和标称型,但树构造算法只适用于标称型数据,因此数值型数据必须离散化
  • 优点:计算复杂度不高,输出结果易于理解,对于中间值的缺失不敏感,可以处理不相关特征数据
  • 缺点:可能会产生过度匹配问题

2 基于信息熵的特征选择

当前数据集上哪个特征在划分数据分类时起决定性作用呢???
为了找到决定性的特征,划分出最好的结果,必须评估每一个特征。

决策树的典型算法有ID3,C4.5,CART等。在《机器学习实战》这本书中采用了ID3算法,ID3算法是一种贪心算法,用来构造决策树。ID3算法以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成的决策树能完美分类训练样例,此算法的目的在于减少树的深度,但是忽略了叶子数目的研究。C4.5算法在ID3算法的基础上进行了改进,对于预测变量的缺值处理、剪枝技术、派生规则等方面作了较大改进,既适合于分类问题,又适合于回归问题。

划分数据集的大原则是:将无序的数据变得更加有序。

度量集合无序程度的两种方法:

  1. 使用信息论度量信息:在划分数据集之前之后信息发生的变化成为信息增益,通过计算每个特征值划分数据集获得的信息增益,选出获得信息增益最高的特征作为划分数据集的参考属性
  2. 基尼不纯度:简单说就是从一个数据集中随机选取子项,度量其被错误分类到其他分组里的概率

本文选用第一种方法,那么就要计算信息增益。

集合信息的度量方式称为香农熵或简称熵。为什么熵可以用来表示数据集的混乱程度?

熵定义为信息的期望值。在信息论与概率统计中,熵是表示随机变量不确定性的度量。如果待分类的事务可能划分在多个分类之中,则符号xi的信息定义为

l(xi)=log2p(xi) l ( x i ) = − l o g 2 p ( x i )

其中,p(x_i) 是选择该分类的概率。那么以上函数图像如下图所示:

Python3《机器学习实战》02:决策树_第1张图片

将概率在[0,1]之间的信息转换为0到正无穷之间的数,那么在接下来计算信息熵时,拉开了数据间距,更能反映出数据的混乱程度。熵越高,表示数据的混乱数据越多。熵的计算公式如下:

H=i=1np(xi)log2p(xi) H = − ∑ i = 1 n p ( x i ) l o g 2 p ( x i )

也就是说,在数据集中去掉某个特征前后,熵的变化越大,信息增益越大,表明被去掉的这个特征越能更好地划分当前数据集。


3 决策树的构造

一般采用递归原则构造决策树。递归结束的条件有两个:

  1. 程序遍历完所有划分数据集的属性:如果数据集已经处理了所有属性,但是类标签依然不是唯一的,此时通常会采用多数表决的方法决定该叶子节点的分类,即选择出现次数最多的那个标签。
  2. 每个分支下的所有实例都具有相同的分类:如果所有实例具有相同的分类,则得到一个叶子节点或者终止块。任何达到叶子节点的数据必然属于叶子节点的分类。

如下面的决策树:
Python3《机器学习实战》02:决策树_第2张图片


4 决策树的修剪

决策树是充分考虑了所有的数据点而生成的复杂树,有可能出现过拟合的情况,决策树越复杂,过拟合的程度会越高。 考虑极端的情况,如果我们令所有的叶子节点都只含有一个数据点,那么我们能够保证所有的训练数据都能准确分类,但是很有可能得到高的预测误差,原因是将训练数据中所有的噪声数据都”准确划分”了,强化了噪声数据的作用。剪枝修剪分裂前后分类误差相差不大的子树,能够降低决策树的复杂度,降低过拟合出现的概率。 这里不再详细说明。


5 完整代码及详细注释

后续补充

你可能感兴趣的:(机器学习实战)