4.1 基本流程
决策树(decision tree)是一类常见的机器学习方法,它是基于树结构来进行决策的,这是人类在面临决策问题时一种很自然的处理机制。
其中,每个测试的结果或是导出最终结论,或是导出进一步的判定问题,其考虑范围是在上次决策结果的限定范围之内。
![](http://img.e-com-net.com/image/info10/b6bfed0522f14aa1b0c1687a39e3ee9d.jpg)
在图中,色泽(属性测试)表示的是根结点;根蒂和敲声(属性测试)表示的是内部结点,好瓜(决策结果)表示的是叶结点。
决策树学习的目的:为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
决策树的基本流程遵循:“分而治之”(divide-and-conquer)策略。
![](http://img.e-com-net.com/image/info10/e5c25b9f32be42d8b1f4cb0a300accf5.jpg)
在决策树基本算法中,有三种情形导致递归返回:
1、当前结点包含的样本全属于同一类别,无需划分
2、当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
3、当前结点包含的样本集合为空,不能划分。
注意:
在第2种情形下,把当前结点标记为叶结点,但类别设定为该结点所含样本最多的类别。
在第3种情形下,把当前结点标记为叶结点,但类别设定为其父结点所含样本最多的类别。
它们的不同点是 :第2种是利用当前结点的后验分布,第3种则是把父结点的样本分布作为当前结点的先验分布。
4.2 划分选择
决策树学习的关键是:如何选择最优划分属性,即使得结点的“纯度”越来越高。
4.2.1 信息增益
“信息熵”(information entropy)是度量样本集合纯度常用的指标。例如:比如有10个西瓜,其中敲声为清脆,混响,没响声的各有3,3,4个,那么p1=3/10,p2=3/10,p3=4/10。
样本集D的信息熵Ent(D)的值越小,D的纯度越高。
![](http://img.e-com-net.com/image/info10/a114fb84553a4ae3a337831ea47d900d.jpg)
注:
若p=0,则plog2p=0
Ent(D)的最小值为0,最大值为log2|y|。
假设离散属性a有很多个可能的取值,它会划分出很多个分支节点,那么衡量这个属性a能给我们带来的更多信息,我们可以用“信息增益”(information gain)的概念去表示。
![](http://img.e-com-net.com/image/info10/4d3ce2bf12bb404cb7a940c4e0b16f16.jpg)
一般而言,信息增益越大,则意味着使用属性a来划分所获得的“纯度提升”越大。
为了更好的理解以上内容,可以运用一些实际例子来理解:
![](http://img.e-com-net.com/image/info10/65aa32873ca0443c964e4a9102a36df7.jpg)
1、输入一个数据集D(表4.1)
2、生成一个节点node
3、如果数据集中的样本全部属于同一类,比如西瓜样本全部是“好瓜”,那么node就是叶子节点(好瓜)。
4、如果样本中的数据集不属于同一类,比如西瓜中既有好瓜也有坏瓜,那就选择一个属性,把西瓜根据选好的属性分类。
那么,我们应该选择西瓜中的哪个属性进行分类呢?
假设我们现在只有两种属性选择,一种是“色泽”、另一种是“纹理”。
选择“色泽”,我们可以把西瓜分成三类——“浅白”全是坏瓜;“墨绿”全是好瓜;“青绿”90%是好瓜,10%是坏瓜。
选择“纹理”,我们可以把西瓜分为三类——“清晰”一半是好瓜,一半是坏瓜;“稍糊”40%是好瓜、60%是坏瓜;“模糊”30%是坏瓜,70%是好瓜。
我们会发现,“色泽”可以一下把很多好瓜和坏瓜区分开来,也就是说我们知道了一个西瓜的色泽后有很大几率正确判断它是好瓜还是坏瓜。而“纹理”却对我们的判断有“色泽”的帮助来得大。
因此,我们选择“能给我们带来更多信息”的属性,或者说能够“减少混淆程度”的属性。也就是我们要根据判断一个属性“信息增益”的大小,来进行分类。(最优化分属性)
以属性"色泽"为例,它有 3 个可能的取值:{青绿,乌黑,浅白}.若使用该属性对 D 进行划分,则可得到 3 个子集,分别记为: D1 (色 泽=青绿), D2 (色泽2 乌黑), D3 (色泽=浅白).
![](http://img.e-com-net.com/image/info10/91b671b2bf2549e0ae94ce9ec2581d9c.jpg)
于是,根据式(4.2)可计算出属性"色泽"的信息增益为:
![](http://img.e-com-net.com/image/info10/488b5a99eef745ca964a7233ddbcf20d.jpg)
类似的,我们可以得出:
![](http://img.e-com-net.com/image/info10/86921e7393cc47c2b67c9c97f68f96ca.jpg)
显然,在所有计算结果中,“纹理”属性的信息增益最大,所以,选择这一属性作为划分属性。
按照“纹理”属性,把西瓜分为清晰、模糊、稍糊三类:
![](http://img.e-com-net.com/image/info10/028be4f4feee4da98118cc879de0f73a.jpg)
5、把第4步得到的几个数据子集作为输入数据,分别再执行上面的计算步骤,取得各属性的信息增益,再选中其中数值最大的作为划分属性,以此循环,直到不再执行第4步为止(也就是叶子节点全部构建完成,算法结束)。
![](http://img.e-com-net.com/image/info10/43106f958e39474e85380cc7d7376e40.jpg)
4.2.2 增益率
实际上,信息增益准则对可取值数目较多的属性有所偏好,为了减少这种偏好可能带来的不利影响,我们可以用“增益率”来选择最优划分属性。
信息增益对于选项多的属性有所偏好。如果我们把训练样本中的“编号”也作为候选划分属性,那么因为“编号”能带来最多的“信息增益”,最大程度的降低混淆程度,所以编号这个属性肯定会被选中为最优划分属性。然而,这样的决策树显然不具备泛化能力,无法对新样本进行有效的预测,所以我们不会选择编号作为属性。
为此,我们可以考虑用增益率代替信息增益:
![](http://img.e-com-net.com/image/info10/d9fdfe6fcdb04ecda0ce2aed2e3ece0b.jpg)
属性a的可能取值数目越多,IV(a)的值通常会越大。这样,就可以有效的按一定的比例适当降低因为可取值数目多而产生的偏好误差。
注意:增益率准则对可取值数目较少的属性会有所偏好,因此,我们应该先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
4.2.3 基尼指数
![](http://img.e-com-net.com/image/info10/fd059e3178924fe6bfcb704463213f95.jpg)
Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。(也就是抽取的两个西瓜中,其中一个是好瓜,另一个是坏瓜的概率)
Gini(D)越小,数据集D的纯度越高。
![](http://img.e-com-net.com/image/info10/99ca15250bff4657af353ca32f6d2cbf.jpg)
属性a的基尼指数定义
若基尼系数越低,越意味着样本集中好瓜比坏瓜的样本多,也就是说,好瓜和坏瓜混淆程度越低。
选择那个使得划分后基尼指数最小的属性作为最优划分属性。
4.3 剪枝处理
剪枝是决策树算法对付“过拟合”的主要手段,通过主动去掉一些分支来降低过拟合的风险。根据泛化性能是否提升来判断和评估要不要留下这个分支。
那么,如何判断决策树的泛化性能是否提升呢?可以采用“留出法”,即预留一部分数据用作“验证集”来进行性能评估。
首先,我们先将西瓜数据集随机的划分为“训练集”和“验证集”两部分。
![](http://img.e-com-net.com/image/info10/e9f51265314a48a88d4b22be33fa1928.jpg)
我们将采用“信息增益”准则来进行划分属性选择,则从表4.2的训练集将会生成一颗如图4.5所示的决策树。
![](http://img.e-com-net.com/image/info10/8dec331491634371b4881749934732fa.jpg)
我们将把剪枝处理分为“预剪枝”和“后剪枝”。
预剪枝过程就是在生成决策树时,用一些新的样本(验证集)测试刚刚训练好的节点,如果这个节点的存在并不能让决策树的泛化性能提高,则停止划分并将当前结点标记为叶结点(好瓜)。(把这个刚训练出来的节点舍弃)
基于信息增益准则,我们先选取“脐部”来对训练集进行划分,它被划分为三个分支。
![](http://img.e-com-net.com/image/info10/2a48fcbce295477db70dbf0610e16e58.jpg)
“决策树桩”
然而,是否应该进行这个划分呢?我们将要进行划分前后的泛化性进行估计。
首先,在结点1中,“脐部”是否应该进行划分?若其为叶结点,则选择训练样例最多的类别去表示,则为“好瓜”(当样例最多的类不唯一时,可任选其中一类)。
我们再用验证集对其进行测试。其中,有三个样例被分类正确,四个样例被分类错误,其验证集精度为42.9%。
在划分后, 分别有{1, 2, 3, 14}(凹陷)、 {6, 7, 15, 17}(稍凹)、 {10, 16}(平坦)的训练样例,因此这 3 个结点分别被标记为叶结点"好瓜"、 "好瓜"、 "坏瓜"(选择训练样例最多的类别去表示)。此时,验证集中有5个样例被分类正确,其验证集精度为71.4%>42.9%,于是,用“脐部”进行划分得以确定。
根据上述的步骤,以此类推,若计算出验证集精度划分前>=划分后,则禁止划分,仅表示为好瓜/坏瓜。
后剪枝过程是用一些新的样本来测试这课刚刚训练出来的决策树,从下往上开始测试,如果某个节点被换成叶节点后整一棵决策树的泛化性能提高了,那么就直接替换为叶结点。
![](http://img.e-com-net.com/image/info10/6ddd48e075664d7ebd2e47d4b6ab5378.jpg)
后剪枝会先对图4.5中的结点6进行考察,若将其分支剪除,则相当于把结点6替换成叶结点,替换后的叶结点包含编号为{7,15}的训练样本,所以叶结点6被标记为“好瓜”,此时决策树的验证集精度提高到57.1%,于是后剪枝策略决定剪枝。
以此类推,考察结点5、2、3、1,最终,生成的决策树如图7所示,其验证集精度为71.4%。
对比图4.7与图4.6,可发现,后剪枝决策树通常比预剪枝决策树保留了更多的分支。且在一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
4.4 连续与缺失值
4.4.1 连续值处理
1.为什么要使用连续值处理?
由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。
最简单的策略是采用二分法(bi-partition)
2.原理与假设?
假设样本集D和连续属性a,a在D上有n个不同的取值,从小到大排序为{a1,a2...}。对于属性a,考察包含n-1个元素的候选划分点集合:
![](http://img.e-com-net.com/image/info10/0347314ab16845bd88c0bdf2291a81f8.jpg)
![](http://img.e-com-net.com/image/info10/9000ba6c87e940229a887e0458735a6e.jpg)
其中,Gain(D,a)是样本集D基于划分点t(将D分为在属性a中取值大于或不大于t的划分点)二分后的信息增益。我们可从中选择出使Gain(D,a)最大化的划分点。
![](http://img.e-com-net.com/image/info10/6749af2dd2d5473889f26d82d1fc9f38.jpg)
根据表4.3,对属性“密度”和“含糖率”,由小到大依次排列,根据公式(4.7),我们可以得到16个候选值:
T密度 ={0.244,0.294, 0.351, 0.381, 0.420, 0.459, 0.518, 0.574, 0.600, 0.621, 0.636, 0.648, 0.661, 0.681, 0.708, 0.746}.
再由公式(4.8)可计算出“密度”的信息增益为0.262(得出结果中的最大值),因此,对应的划分点为0.381。
T含糖率={0.049, 0.074, 0.095, 0.101, 0.126, 0.155, 0.179, 0.204, 0.213, 0.226, 0.250, 0.265, 0.292, 0.344, 0.373, 0.418}.
再由公式(4.8)可计算出“含糖率”的信息增益为0.349(得出结果中的最大值),因此,对应的划分点为0.126。
表4.3的数据上述属性的信息增益为:
![](http://img.e-com-net.com/image/info10/e668efd93b6b4f958707a22a104f20ad.jpg)
于是,“纹理”(信息增益值最大)被选作根结点划分属性。
![](http://img.e-com-net.com/image/info10/ccf3be2ea3d547578032e270db8ab86b.jpg)
注意:若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性.
例如:在父结点上使用了“密度<=0.381”,不会禁止在子结点上使用“密度<=0.294”。
4.4.2 缺失值处理
1.为什么要进行缺失值处理?
因为在现实任务中常常会遇到不完整样本,如果简单地放弃不完整版本,仅使用无缺失值样本进行学习,这会对数据信息的极大浪费。
2.怎样处理缺失数据?
我们需要解决两个问题:1)如何在属性值缺失的情况下进行划分属性选择? 2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
首先,我们先让~D表示D中在属性a上没有缺失值样本的子集。
对于问题1),我们仅可根据~D来判断属性a的优劣。假定属性 α 有 V 个 可取值 {α1,α2 …, αV}, 令 ~DV 表示 ~D 中在属性 α 上取值为aV的样本子集, ~Dk表示~D中属于第 k 类 (k = 1,2, .. . , lyl)的样本子集,则显然有:
![](http://img.e-com-net.com/image/info10/8d5ca5ef6b5947eaa0ce9bab137d533e.jpg)
![](http://img.e-com-net.com/image/info10/bba302dc4676482d98b9d128038a7738.jpg)
假定我们为每个样本x赋予一个权重Wx,并定义:
![](http://img.e-com-net.com/image/info10/e800f220196b4a2cac8d1c724dceded2.jpg)
(4.9)表示对于属性a,无缺失的样本比例。
(4.10)表示无缺失样本中,第k类所占比例。
(411)表示无缺失样本在属性a上取值为aV的样本的比例。
一般来讲,样本具有多个属性。不同属性的缺失值情况不同。直观上来看:假如100个样本中,属性a的缺失值高达99份,属性b的缺失值只有1份,属性c的缺失值有50份。那在存在前面缺失的情况下,哪个属性最可靠?
可想而知最可靠的是属性b,其次是c,再其次是a。由此可以考虑给不同属性增加一个系数
p=无缺失值总数/样本集合总数,例如此处举例Pa=1/100,Pb=99/100,Pc=50/100.
基于以上定义,我们可以将信息增益的计算式推广为:
![](http://img.e-com-net.com/image/info10/4e10f8eda6dd409e81bd8f941249e3ef.jpg)
对于问题2):
若样本x在划分属性a上的取值已知,则将x划入与其对应的分支结点,并保持样本权重Wx不变。若样本x在划分属性a上的取值未知,则将样本x划入所有子结点,且样本权值在与属性值aV对应的子结点中重新调整为~rV·Wx。
简单来说,就是一开始的时候,选择的第一个结点node,在样本集中,只取无缺失值的样例。(如:在表4.4中,以属性“色泽”为例,可取的样例有14个)
而在最后,我们在算信息增益时,应该把结果乘上相应的比例(14/17),从而能得出所有属性在D上的信息增益。
4.5 多变量决策树
1.什么叫多变量决策树?
若我们把每个属性视为坐标空间中的一个坐标轴,则 d 个属性描述的样本就对应了 d 维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。
特点:轴平衡(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。
![](http://img.e-com-net.com/image/info10/60b36dc38dcc4ebc8f5dd4a75c56fc00.jpg)
若使用斜的划分边界,则决策树模型将大为简化。
![](http://img.e-com-net.com/image/info10/539413eb1ca14ed4badcafe039f4f0ad.jpg)
对西瓜数据3.0a,我们可学得图4.13这样的多变量树,其分类边界如图4.14所示。
![](http://img.e-com-net.com/image/info10/a2fe84850fce4a1c92cc93ce42f37962.jpg)
转自作者:Chasing_8513
链接:https://www.jianshu.com/p/87cc3d142cfe
來源: