机器学习算法——决策树(Decision Tree)

决策树在分类、预测、规则提取等方面有着广泛应用,是一种基本的分类与回归方法。包括ID3 、c4.5、CART算法。决策树的生成是一个递归的过程。在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。与其他算法相比,决策树的原理浅显易懂,计算复杂度较小,而且输出结果易于理解。

分类决策树模型是一种描述对实例进行分类的树形结构。决策树由节点与有向边组成。节点有两种类型:内部结点和叶节点,内部结点表示一个特征或者属性,叶节点表示一个类。

分类的时候,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子节点;此时,每一个子节点对应着该特征的一个取值。如此递归向下移动,直至达到叶节点,最后将实例分配到叶节点的类中。

决策树学习算法包括特征选择,决策树的生成与剪枝过程。决策树的学习算法通常是通过递归来选择最优特征,并用最优特征对数据集进行分割。开始时,构建根结点,选择最优特征,该特征有几种值就分割为几个子集,每个子集分别递归调用此方法,返回节点就是上一层的子节点,直到所有特征都已经用完,或者数据集只有一维特征为止。

我们从上面可以看出特征选择的好坏直接影响到决策树模型的好坏。如何选择最优划分属性。一般而言,随着划分的不断进行,我们希望决策树的分支节点所包含的样本尽可能的属于同一类别。即节点的纯度越高。于是特征选择问题就转化为了纯度的定义问题。

熵:

表示变量不确定性的度量,假设当前样本集合D中第k类样本所占的比例为pk(k=1,2,3,....|y|)则D的信息熵定义为:

另外,当对数的底为2时,熵的单位为bit,为e时,单位为nat.

熵越大,随机变量的不确定性就越大。当节点的类别为均匀分布时,信息熵为1.当只包含一个类时,信息熵为0.

信息增益:

信息增益的定义是分类前的节点信息熵减去分类后子节点熵的加权和。即不纯度的减少量,也是纯度的增加量。特征选择的规则是选择使节点信息增益最大的属性分割该节点

假定离散属性a有v个可能的取值(a1,a2,a3,...av),若使用a来对样本集进行划分,则会产生v个分支节点。其中第V个分支节点包含了样本集合D中在属性a上取值为av的样本Dv.我们可以根据信息熵的公式计算信息熵考虑到不同分支节点包含的样本数不同,样本数越多的分支节点权重越大,给分支节点赋予权重。可以计算出属性a作为划分属性,最后得到的信息增益如下:

如周志华机器学习一书中的西瓜数据集一样:

增益率:

GINI指数:

ID3

其核心是在决策树的各级节点上,使用信息增益方法作为属性的选择标准,来帮助确定生成每个节点时所应采用的合适属性。

C4.5

C4.5决策树生成算法相对于ID3算法的改进是使用信息增益率来选择节点属性。C4.5算法可以克服ID3算法存在的不足:ID3算法只适用于离散的描述属性,而C4.5算法既能够处理离散的描述属性,也可以处理连续的描述属性

CART

CART决策树是一种十分有效的非参数分类和回归方法,通过构件树、修剪树、评估树来构建一个二叉树。当终结点是连续变量时,该树为回归树,当终点是分类算法时,该树为分类树。

剪枝:

在决策树学习过程中为了尽可能的正确分类训练样本,节点划分过程将不断地重复,有时会造成决策树分支过多这时就有可能因训练样本学的太好了,导致泛化能力较低。为了解决这个问题,有两个解决方法:

预剪枝

常用的有三种方法;

1)预先设定一个树的最大深度,如果分裂后的树的深度达到了阈值,则停止分裂。

2)设定一个分裂阈值,若分裂得到信息增益不大于这个阈值,则停止分裂。

3)按照树的准确度,如果分裂后树的准确度提升,则分裂。

优缺点:

预剪枝使得决策树很多的分支都没有展开,这不仅降低了过拟合的风险,还显著减少了决策树训练和预测的时间开销。但是另一方面,有些分支的当前划分虽然不能带来泛化性能的提升,甚至可能导致泛化性能的暂时降低。但在其基础上进行的后续划分却可能导致泛化性能显著上升。所以基于贪心算法的预剪枝可能

后剪枝

首先生成与训练集完全拟合的决策树,然后自下而上地逐层剪枝,如果一个节点的子节点被删除后,决策树的准确度没有降低。那么就将该节点设置为叶节点。(基于的原则是Occam剪刀:具有相似效果的两个模型选择较简单的那个)

决策树原理(上)

决策树原理(下)

scikit-learn决策树算法使用

 

猜你喜欢

转载自blog.csdn.net/zhaoqqa/article/details/81915685