决策树(下)


一、剪枝处理

       在机器学习中,经常会利用训练集去训练模型来应对未知的实例,但是在模型的训练过程中每个人都会遇到“过拟合”的问题,那么什么是过拟合?
       由于模型是在训练集上不断地训练生成的,可能会出现这个模型把训练集学习的太好了,在识别新出现的实例时,会因为对训练集中某些属性的过度学习导致对实例的判断失误,从而降低了模型的泛化能力;而对决策树进行剪枝处理,可以很好的解决这种“过拟合”的现象。

1.预剪枝

       预剪枝是指在决策树生成的过程中,对每一个节点在划分前先进行估计,若进行划分不能提升决策树的泛化性能,则停止划分并将当前节点标记为叶子节点;
       下面根据西瓜书的一个例子来理解一下剪枝;
       本例将西瓜书的表4.1的数据集随机划分为两部分,双线上部作为训练集,下部作为验证集:

西瓜书表4.2

西瓜书表4.2

       我们采用大数据漫游之决策树(上)中提到的信息增益准则来进行划分属性的选择,在上篇文章我们讨论到第一个划分的属性是西瓜的脐部,并产生了三个分支,如图1所示:
西瓜书图4.6

图1 西瓜书图4.6

       那么该节点该不该进行划分呢?

       若不进行划分,则将该节点标记为叶子节点,假设我们将其标记为好瓜,则通过验证集来验证该单节点的决策树(即这棵树没有进行划分,只有根节点),编号{4,5,8}样例分类正确,{9 11 12 13}分类错误,验证精度为 :3/7=42.9%;

       在用属性脐部进行划分之后,节点 2 3 4分别包含编号为{1 2 3 14},{6 7 15 17},{10 16}的训练样例,因此这三个节点分别被标记为好瓜、好瓜、坏瓜(好瓜比例大于等于坏瓜就认定为好瓜),此时验证集标号为{4 5 8 11 12}分类正确,验证精度为:5/7=71.4%>42.9%于是用脐部进行划分得以确定;

       同样的道理,判断是否需要对2节点进行划分,根据信息增益准则,选择色泽属性进行划分,划分后,编号为{5}的验证集分类由正确变为错误,所以验证精度下降,不进行该划分;

       节点3 最优划分属性为“根蒂”,划分前后的验证集精度均为71.4%,所以不进行划分;

       节点4所包含的训练样例已经属于同一类,不用进行划分;

       至此预剪枝结束,得到图一的剪枝结果,我们可以发现,该树的大多数节点都没有展开,不仅很好的降低了过拟合的风险而且显著减少了对决策树的训练和测试时间;但是有些分支的当前划分可能不能提升验证集的性能,但是后续划分或许可以,由于预剪枝采用的是“贪心策略”,所以说可能会给其生成的决策树带来欠拟合的风险。

       后剪枝就可以很好的解决欠拟合的问题,我们一起来看看吧!

2.后剪枝

       后剪枝是指先根据训练集生成一颗完整的决策树,然后自底向上的对非叶子节点进行考察,若将该结点对应的子树替换为叶节点可以提升决策树的泛化性能,则将该子树替换为叶节点;
后剪枝需要根据训练集先生成完整的决策树,如图2所示:

西瓜书 图4.5

图2 西瓜书图4.5

       后剪枝从非叶节点开始进行判断,先判断图二中的节点6,若将其剪去,即将该子树替换为叶节点,替换后的节点包括编号为{7 15}的训练集,故标记为好瓜,此时决策树的精度提升为57.1%(原精度为42.9%),于是可以进行剪枝;

       同理将节点5替换为叶节点,替换后包含{6 7 15},标记为好瓜,此时验证集精度为57.1%并未提高,故该枝可剪可不剪(此处选择不剪);

       以此类推,得到后剪枝处理后的决策树:
在这里插入图片描述

西瓜书图4.7

       从图中可以看出,后剪枝得到的决策树保留了更多的分支,所以一般情况下后剪枝决策树的欠拟合风险更小,泛化能力也更强,但是由于其需要先生成完整的决策树再自底向上进行非叶节点的考察,其训练时间的开销要比预剪枝以及非剪枝的决策树大得多。

二、连续值与缺失值的处理

1.连续值的处理

       西瓜判好坏的例子中,我们会发现,给出的数据集里面的西瓜的属性取值都是离散的,比如色泽的乌黑、青绿、浅白等等,如果有一些属性是连续的,比如西瓜的甜度(0-10),我们该如何处理呢?
比如有一组西瓜的数据集,其中包含甜度这一属性,我们的处理方法是将甜度的大小按照从小到大的顺序去排列,从而得到一个关于甜度的顺序,此时我们可以根据这个顺序,去设定阈值,从而进行决策,如下图所示:

在这里插入图片描述
       图中有八个甜度,所以我们每次取阈值就可以依次在排好序的序列中从两个相邻甜度之间取一值(红色箭头位置),其左侧为一种情况,右侧为一种情况,再根据属性划分的原则进行计算划分,便可以解决连续值的问题。

2.缺失值的处理

       如果给定的西瓜数据集并不是完整的,比如某一个样例的某一个属性没有给出具体的值,是将缺失值的样例都删除?肯定不可行,那我们该如何处理?
处理方法有如下几种:
       1、我们要生成决策树,那我们要依据西瓜的属性进行划分,首先,根据选择的属性将有缺失值的样例均去除,比如以纹理属性为例,总样本有20个,去除缺失值的之后,还剩下15个,那么我们就先根据这15个样例计算未划分前的信息熵,再计算依据纹理属性划分后的信息增益x,此时计算出来的信息增益(x)是去掉缺失值的结果,那么回复到原样本,就要再乘以

Gain(D,纹理)= x* 15 20 \frac{15}{20} 2015

可以理解为计算完缺省值的信息增益x有 15 20 \frac{15}{20} 2015的几率是总样本在纹理属性上的增益,因为该增益只是依据总样本的一部分计算出来的,同理计算其他属性的信息增益,进而进行属性划分;

        2、如果缺失值是离散值,我们可以选择用众数进行填充,比如该列属性值哪一个取值最多就用哪一个进行填充;也可以用相关性高的列进行填充,比如我们发现西瓜只要是青绿色的,它的纹理大概率清晰,当遇到纹理值缺失的时候,我们就可以依据其色泽来进行推算这个属性;

       3、如果缺失值是连续型的,我们就可以用中位数进行填充;亦或是相关性高的列做线性回归进行估计,比如某两个属性经过计算发现他们具有一定的线性关系,那么我们就可以依据其中一个来推测另外一个属性的缺失值。

总结

       决策树相关的知识就总结的差不多了,如果有什么不对的或者不周到的地方,欢迎指正,强烈推荐周志华的西瓜书以及【一起啃书】机器学习西瓜书白话解读,讲的特别好,特别详细!

参考

1、 机器学习(西瓜书) - 周志华
2、【一起啃书】机器学习西瓜书白话解读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值