1. 剪枝(pruning)处理

首先,我们先说一下剪枝的目的——防止“过拟合”。

在决策树的学习过程中,为了保证正确性,会不断的进行划分,这样可能会导致对于训练样本能够达到一个很好的准确性,但是对于测试集可能就不是很好了,这样的模型不具备泛化性。

举一个例子,有如下的数据集:
坐标轴的上的每一个点代表一个样本,有x,y两种属性,其中,蓝色的点代表类0,橙色的点代表类1。

当我们使用决策树进行训练后,模型对于数据的识别区域如下,在粉红色区域,其认为里面的点为类0,蓝色的区域为类1:


大家可能发现一个问题,那就是这个区域划分的太“细致”了。因为数据是有噪音(noise)的,这样划分明显是不合理的。
这里大家可以看一看决策树的图片:

那么如何来缓解这种问题呢?其中有一种方法就是去掉一些分支(剪枝)来降低过拟合的风险。

关于剪枝处理请看这里【paper】。

剪枝有两种方案:

  1. 预剪枝(prepruning)
  2. 后剪枝(post-pruning)
1.1. 预剪枝(prepruning)

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。

用通俗的话来说,就是如果进行划分能够带来更好的结果就进行划分,否则不进行划分。首先,我们定义一个训练集和一个验证集如下:(西瓜书中间的例子)


上面一部分是训练集,下面一部分是测试集。然后让我们来对训练集(记住是训练集)进行划分,划分的规则与上面的一样。

下面的这幅图是未剪枝的情况

那么,剪枝是如何进行的呢?

首先,我们先判断“脐部”,如果我们不对“脐部”进行划分,也就是说这棵决策树是这样的:

只有一个好瓜的判断结果(根据上面的算法流程图,node节点直接就是叶子节点,其类别由样本中最多的决定【这里既可以是好瓜也可以是坏瓜,因为数量一样】)


这样下来,也就是说无论你什么瓜过来我都判断它是好瓜。使用验证集进行验证,验证的精准度为:37\frac{3}{7}73​×100%=42.9%。如果进行划分呢?

下图便是进行划分的情况,其中被红色圆圈框出来的部分表示验证正确。

如果只划分“脐部”这个属性,我们可以通过其来划分好瓜和坏瓜,通过验证机去测试,我们可以得到划分后的准确性为:57\frac{5}{7}75​×100%=71.4%>42.9%,所以选择划分。

下面便是进行前剪枝后的划分结果,使用验证集进行验证,精度为71.4%

尽管该方案可以降低过拟合的风险,并在一定程度上能够降低算法的复杂度,但也会带来欠拟合的风险。因为会出现另外一种情况:有可能当前划分不能提升泛化能力,但是在此基础上的后续的划分也许可以导致性能显著提高。

1.2. 后剪枝(post-pruning)

后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

后剪枝和前剪枝的不同在于后剪枝是在生成决策树后再进行剪枝。顺序是由下到上

我们继续来看这幅图:
通过验证集,我们易得到该决策树的识别率为42.9%。

让我们重新看一下数据吧,数据集和验证集如下:

现在让我们来进行剪枝吧!!首先先看节点⑥,节点6中包含编号为{7(好瓜),15(坏瓜)}的训练样本,因此我们将节点⑥变成叶节点并标记为“好瓜(坏瓜也ok)”。如下所示:

在这种情况下,验证集中序号为{4,8,11,12}验证正确,精度调高到
47\frac{4}{7}74​×100%=57.1%,因此可以进行剪枝。

考虑结点⑤,包含编号为{6,7,15},将其变成叶节点(标记为“好瓜”),使用验证集去验证,其精度仍为57.1%,没有提高,进行考虑。同理可得到下面的这副图片:

最终,该决策树的精度为71.4%

比较预剪枝和后剪枝,后剪枝保留的分支更多,同时后剪枝的欠拟合的风险很小,泛化性能往往优于预剪枝决策树,但是显而易见,训练的时间要比预剪枝大得多。

参考

https://www.cnblogs.com/xiaohuiduan/p/12490064.html

【ML】决策树--剪枝处理(预剪枝、后剪枝)相关推荐

  1. 决策树的预剪枝与后剪枝

    前言: 本次讲解参考的仍是周志华的<机器学习>,采用的是书中的样例,按照我个人的理解对其进行了详细解释,希望大家能看得懂. 1.数据集 其中{1,2,3,6,7,10,14,15,16,1 ...

  2. 决策树_(预剪枝和后剪枝)_以判断西瓜好坏为例

    剪枝的目的: 剪枝的目的是为了避免决策树模型的过拟合.因为决策树算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多,也就导致了过拟合.决策树的剪枝策略 ...

  3. 细讲sklearn决策树后剪枝(带例子)

    <老饼讲解机器学习>http://ml.bbbdata.com/teach#103 目录 一.CCP后剪枝简介 二.剪枝操作过程 (1) 查看CCP路径 (2)根据CCP路径剪树 为预防模 ...

  4. 机器学习-预剪枝和后剪枝

    一棵完全生长的决策树会面临一个很严重的问题,即过拟合.当模型过拟合进行预测时,在测试集上的效果将会很差.因此我们需要对决策树进行剪枝, 剪掉一些枝叶,提升模型的泛化能力. 决策树的剪枝通常有两种方法, ...

  5. 决策树第二部分预剪枝

    决策树预剪枝: 决策树可以分成ID3.C4.5和CART. 算法目的:决策树的剪枝是为了简化决策树模型,避免过拟合. 剪枝类型:预剪枝.后剪枝 预剪枝:在构造决策树的同时进行剪枝.所有决策树的构建方法 ...

  6. 决策树后剪枝算法(四)最小错误剪枝MEP

    ​  ​​ ​决策树后剪枝算法(一)代价复杂度剪枝CPP  ​​ ​决策树后剪枝算法(二)错误率降低剪枝REP  ​​ ​决策树后剪枝算法(三)悲观错误剪枝PEP  ​​ ​决策树后剪枝算法(四)最小 ...

  7. 决策树(decision tree)(二)——剪枝

    决策树(decision tree)(二)--剪枝 **注:本博客为周志华<机器学习>读书笔记,虽然有一些自己的理解,但是其中仍然有大量文字摘自周老师的<机器学习>书. 决策树 ...

  8. 机器学习:决策树的预剪枝和后剪枝

    述概: 剪枝:在机器学习的决策树算法中,为防止过拟合现象和过度开销,而采用剪枝的方法,主要有预剪枝和后剪枝两种常见方法. 预剪枝:在决策树生成的过程中,预先估计对结点进行划分能否提升决策树泛化性能.如 ...

  9. 决策树剪枝的基本策略有预剪枝和后剪枝,请简述并分析两种剪枝策略

    1.决策树是一类常见的机器学习方法,是基于树结构进行决策的.一般的,一棵决策树包含两类结点:内部节点和叶结点,其中内部节点表示表示一个特征或属性,叶结点表示__决策结果____. 2.在决策树学习中, ...

最新文章

  1. 如何在CPU上优化GEMM(上)
  2. PMP之路 – 第2天 (做模拟题)
  3. 掘金小册Jenkins大纲准备
  4. shell 从1加到100
  5. 学习笔记(二)——CSS基础
  6. JVM辅助信息参数设置
  7. 【LEACH协议】基于matlab粒子群算法改进LEACH协议【含Matlab源码 2052期】
  8. Visual Studio使用教程
  9. 物联网RFID技术之应用ETC系统
  10. echarts自定义地图总结(VUE)
  11. 电脑什么软件都没开,运行内存就占满了
  12. 麦咭萌app送智伴机器人_模拟麦咭机器人软件 麦咭机器人官网
  13. CT图像密度分辨力和空间分辨力的区别和联系
  14. IDEA界面太丑了 我教你修改界面吧
  15. ElasticSearch近实时搜索的实现
  16. 认识DPDK的UIO驱动(一)
  17. unity网络实战开发(丛林战争)-前期知识准备(003-开发服务器端的发送数据和接收数据)
  18. python模块介绍-gevent介绍:基于协程的网络库
  19. java控件数组_java通过复选框控件数组实现添加多个复选框控件示例分享
  20. java服务器推送消息技术

热门文章

  1. html5视频倍速播放功能
  2. HP大中华区总裁孙振耀谈人生
  3. Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
  4. 10w字!用Django+Flask搞定爬虫
  5. 使用SandCastle和ScriptDoc创建JavaScript文档
  6. win11修改底部任务栏显示位置
  7. java图书管理系统(前后端分离前)
  8. 常见加密算法附JAVA代码案例
  9. 超声波明渠流量计测流系统
  10. 冒泡排序、冒泡排序原理、方法