决策树(一):分类决策树

决策树模型就是需要通过样本数据构建一棵树,数中除了叶子节点的每个节点都是一个数据特征的划分点,将待测数据的对应的特征和该节点上的划分特征做对比,然后将待测节点分到该节点的某个子节点上,然后再进行对比,直到叶子节点为止,然后判断待测数据的类型集合。

决策树是一种基本的分类和回归的方法,所以可以分为分类决策树和回归决策树。分类决策树主要适用于标称型数据(如苹果的颜色、形状、口味等特征数据),可以理解为非数值化的,回归树就适用于数值型数据,可以是连续型的数据。

决策树的学习过程是利用样本数据,依据损失函数最小化的原则建立决策树模型,其学习过程分为特征选择、决策树生成、决策树剪枝。特征选择就是依据损失最小化选择当前节点的划分标准是依据那个特征划分的;决策树的生成就是对每个节点选择合适的划分特征,直到结束的过程;决策树的剪枝就是防止过拟合,增加决策树泛化能力的过程。

下面先介绍分类回归树:

  1. 特征选择

    特征选择就是为当前节点选择合适的划分属性,以符合损失最小的原则。通常在分类回归树的特征选择过程用到的是信息增益熵和信息增益比。

信息增益熵:

    先从信息熵说起。在信息论与统计中,熵是随机变量不确定的度量。设X为随机变量,其概率分布为P(X=xi) = pi则X对应的信息熵为

              《决策树(一):分类决策树》

从等式的右侧我们可以看出,熵的大小只与p值有关,所以修改上面的信息熵的形式:

        《决策树(一):分类决策树》

熵越大,随机变量的不确定性越大,也就越不能用该属性来分类。

条件熵H(Y|X)是衡量在随机条件X的情况下,随机条件Y的不确定性。其定义为X给定条件下Y的条件概率分布的熵对X的数学期望

《决策树(一):分类决策树》

这里还用区分苹果和梨的例子,假设一共100个水果样本。

这里的n表示对应特征的值的种类数(样本的颜色特征:红色,绿色,灰色,黄色),此时n=4,pi表示第i个特征值占总的样本的频率,如果绿色的水果一共10个,那么绿色特征的p=1/10。后面的H(Y|X=xi)表示该特征值的信息熵,表示绿色水果对应的信息熵。各个特征值的频率乘以对应特征值的信息熵,然后求和就得到了该特征的信息熵,也就是颜色特征的信息熵。

信息增益

    我们上面说了信息熵和条件信息熵,这些都是对于单个属性来说的,怎样衡量所有特征之间的比较关系以及对整体的影响,就是下来要说的信息增益的概念:

特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即:

《决策树(一):分类决策树》信息熵H(D)表示对于数据集D进行分类的额不确定性,而经验条件熵表示在特征A给定的条件下对数据及D进行分类的不确定性,他们的差就是信息增益,表示由于特征A而使得对数据集D的分类的不确定性的减少程度。显然信息增益熵越大,对数据集D不确定性减少越多,也就是我们希望选择的分类特征。

信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题(这个为什么这么说,没有太想明白)。可以使用信息增益比来对这一问题进行校正:

《决策树(一):分类决策树》,分子很好理解是信息增益,那么分母呢?《决策树(一):分类决策树》,n是A取值的个数,A是分类的特征,也就是特征值的个数|Di|也就是特征值Di的个数,|D|也就是样本的个数。

  1. 决策树的生成

决策树的生成过程就是从根节点开始,根据特征选择的标准,依次选择每个节点的合适的分割特征,直到满足相应的条件为止;常用的有ID3算法和C4.5算法,两算法基本都差不多,只是过程中选择特征值的标准不一样。

ID3:

    ID3算法用的是信息增益来选择每个节点的分割特征。其具体过程为:从根节点开始,计算数据集D所有特征的信息增益,然后选择信息增益最大的那个特征,作为根节点的划分特征,将待测数据划分为n个子集{D1,D2,…,Dn},然后这是个递归的过程,分别在各个子集上计算剩余特征的信息熵,在进行子集的划分,直到信息增益都特别小或者没有特征可以选择为止。

决策树停止划分条件信息增益是否小于某个阈值ε,需要我们提前指定;如果是没有特征可选的停止,那极端情况就是每个叶子节点只有一个样本。

C4.5算法:

    C4.5算法和ID3算法的过程是一样的,只不过是将特征选择的标准换成了信息增益比,阈值ε,变成了信息增益比的阈值,其他过程相同。

  1. 决策树的剪枝

    我们通过上述的两种算法构建出来的决策树,都是在训练数据上做的,换句话说就是对训练数据拟合度特别好,但是对测试数据集就不一定了,这就会出现对训练数据过拟合的情况;过拟合也是模型复杂的表现,所以就需要简化模型,使其具有更好的泛化能力;解决这个问题就是对已经生成的树进行剪枝,减掉某些子树或者叶子节点,从而简化模型。

我们通过剪枝前后的损失函数来衡量是否进行剪枝,接下来搬上枯燥的公式:

决策树的损失函数定义为:

《决策树(一):分类决策树》

公式解释:T是决策树的叶子节点,|T|是叶子节点的个数,Nt是叶子节点样本的个数,其中:《决策树(一):分类决策树》,Ntk表示在对应的子集中分类为k的子集的个数,所以合并两各式子,得到如下公式:

《决策树(一):分类决策树》 

其中对数系数的分母Nt抵消了,将上式简写为:

《决策树(一):分类决策树》 

C(T)表示对训练数据的预测误差,|T|表示模型复杂度,α>=0应该叫做调和系数(其实我觉得也可以看做是一个正则化系数),控制两者之间的影响。当α较大时,促使选择较简单的模型,较小的子树,当α交到时促使选择较复杂的模型,较大的树。α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型复杂度。在α确定后,较大的子树,模型复杂度也高,与训练数据拟合程度好,较小的子树模型复杂度也低,与训练数据拟合程度不好。

模型建立我们一般要有训练数据和测试数据,剪枝是我们用测试数据对生成的决策树进行剪枝。其中C(T)我们可以看到是对所有的进行求预测误差,所以在每次剪枝,我们都需要衡量剪枝前后的Cα(T)即决策树的损失函数,如果剪枝后损失更小,就剪枝,否则不剪。

  1. 总结

分类决策树,由于特征值的个数是不确定的,所以每个节点的子节点的个数也是不确定的。而回归树就不一样了,回归树一般都是二叉树模型的。

 

    原文作者:会飞的犬良
    原文地址: https://blog.csdn.net/things_use/article/details/101433489
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞