机器学习---预剪枝、后剪枝(REP、CCP、PEP、)

1. 为什么要进行剪枝

横轴表示在决策树创建过程中树的结点总数,纵轴表示决策树的预测精度。 实线显示的是决策树

在训练集上的精度,虚线显示的则是在⼀个独⽴的测试集上测量出来的精度。 随着树的增⻓,在

训练样集上的精度是单调上升的, 然⽽在独⽴的测试样例上测出的精度先上升后下降。 

出现这种情况的原因:

噪声、样本冲突,即错误的样本数据;特征即属性不能完全作为分类标准;巧合的规律性,数据量

不够⼤。

剪枝 (pruning)是决策树学习算法对付"过拟合"的主要⼿段。 在决策树学习中,为了尽可能正确分

类训练样本,结点划分过程将不断重复,有时会造成决策树分⽀过多,这时就可能因训练样本学

得"太好"了,以致于把训练集⾃身的⼀些特点当作所有数据都具有的⼀般性质⽽导致过拟合。因

此,可通过主动去掉⼀些分⽀来降低过拟合的⻛险。

如何判断决策树泛化性能是否提升呢? 可使⽤留出法,即预留⼀部分数据⽤作"验证集"以进⾏性

能评估。例如对下表的⻄⽠数据集,将其随机划分为两部分,其中编号为 {1,2,3,6, 7, 10,

14, 15, 16, 17} 的样例组成训练集,编号为 {4, 5, 8, 9, 11, 12, 13} 的样例组成验证

集。

假定采⽤信息增益准则来划分属性选择,则上表中训练集将会⽣成⼀棵下⾯决策树。 

接下来,将对这⼀棵树进⾏剪枝。 

2. 预剪枝

决策树剪枝的基本策略有"预剪枝" (pre-pruning)和"后剪枝"(post- pruning) 。

预剪枝是指在决策树⽣成过程中,对每个结点在划分前先进⾏估计,若当前结点的划分不能带来决

策树泛化性能提升,则停⽌划分并将当前结点标记为叶结点;后剪枝则是先从训练集⽣成⼀棵完

整的决策树,然后⾃底向上地对⾮叶结点进⾏考察,若将该结点对应的⼦树替换为叶结点能带来决

策树泛化性能提升,则将该⼦树替换为叶结点。

有多种不同的方式可以让决策树停止生长,下面介绍几种停止决策树生长的方法:

①定义一个高度,当决策树达到该高度时就可以停止决策树的生长 ,这是一种最为简单的方法;

②达到某个结点的实例具有相同的特征向量,即使这些实例不属于同一类,也可以停止决策树的生

长。这种方法对于处理数据中的数据冲突问题非常有效;

③定义一个阈值,当达到某个结点的实例个数小于该阈值时就可以停止决策树的生长;

④定义一个阈值,通过计算每次扩张对系统性能的增益,并比较增益值与该阈值的大小来决定是否

停止决策树的生长。

预剪枝方法不但相对简单,效率很高,而且不需要生成整个决策树 ,适合于解决大规模问题。该

方法看起来很直接,但要精确地估计决策树生长的停止时间并不容易,即选取一个恰当的阈值是非

常困难的。高阈值可能导致过分简化的树,而低阈值可能使得树的简化太少。

在测试集上定义损失函数C,目标是通过剪枝使得在测试集上C的值下降。 例如通过剪枝使在测试

集上误差率降低。 首先,自底向上的遍历每一个非叶节点(除了根节点),将当前的非叶节点从树

中剪去,其下所有的叶节点合并成一个节点,代替原来被剪掉的节点。 然后,计算剪去节点前后

的损失函数,如果剪去节点之后损失函数变小了,则说明该节点是可以剪去的,并将其剪去;如果

发现损失函数并没有减少, 说明该节点不可剪去,则将树还原成未剪去之前的状态。 最后,重复

上述过程,直到所有的非叶节点(除了根节点)都被尝试了。

对于上例,⾸先,基于信息增益准则,会选取属性"脐部"来对训练集进⾏划分,并产⽣ 3 个分⽀,

如下图所示。然⽽,是否应该进⾏这个划分呢?预剪枝要对划分前后的泛化性能进⾏估计。在划分

之前,所有样例集中在根结点。

若不进⾏划分,该结点将被标记为叶结点,其类别标记为训练样例数最多的类别,假设将这个叶结

点标记 为"好⽠"。 ⽤前⾯表的验证集对这个单结点决策树进⾏评估。则编号为 {4,5,8} 的样例

被分类正确。另外 4个样例分类错误,于是验证集精度为3 / 7 ∗ 100% = 42.9%。 

在⽤属性"脐部"划分之后,上图中的结点2、3、4分别包含编号为 {1,2,3, 14}、 {6,7, 15,

17}、 {10, 16} 的训练样例,因此这 3 个结点分别被标记为叶结点"好⽠"、 "好⽠"、 "坏⽠"。

此时,验证集中编号为 {4, 5, 8,11, 12} 的样例被分类正确,验证集精度为5 / 7 ∗ 100% =

71.4% > 42.9%。于是,⽤"脐部"进⾏划分得以确定。

然后,决策树算法应该对结点2进⾏划分,基于信息增益准则将挑选出划分属性"⾊泽"。然⽽,在

使⽤"⾊泽"划分后,编号为 {5} 的验证集样本分类结果会由正确转为错误,使得验证集精度下降为

57.1%。于是,预剪枝策略将禁⽌结点2被划分。 对结点3,最优划分属性为"根蒂",划分后验证集

精度仍为 71.4%. 这个划分不能提升验证集精度,于是,预剪枝策略禁⽌结点3被划分。 对结点4,

其所含训练样例已属于同⼀类,不再进⾏划分。于是,基于预剪枝策略从上表数据所⽣成的决策树

如上图所示,其验证集精度为 71.4%。这是⼀棵仅有⼀层划分的决策树,也称"决策树桩" (decision

stump)。

3. 后剪枝

后剪枝先从训练集⽣成⼀棵完整决策树,继续使⽤上⾯的案例,从前⾯计算,了解到前⾯构造的决

策树的验证集精度为 42.9%。

后剪枝⾸先考察结点6,若将其领衔的分⽀剪除则相当于把6替换为叶结点。替换后的叶结点包含编

号为 {7, 15} 的训练样本,于是该叶结点的类别标记为"好⽠",此时决策树的验证集精度提高至 

57.1%。于是,后剪枝策略决定剪枝,如下图所示。

然后考察结点5,若将其领衔的⼦树替换为叶结点,则替换后的叶结点包含编号为 {6,7,15}的训

练样例,叶结点类别标记为"好⽠";此时决策树验证集精度仍为 57.1%. 于是,可以不进⾏剪枝。

对结点2,若将其领衔的⼦树替换为叶结点,则替换后的叶结点包含编号为 {1, 2, 3, 14} 的训

练样例,叶结点标记为"好⽠",此时决策树的验证集精度提高至 71.4%。于是,后剪枝策略决定剪

枝。对结点3和1,若将其领衔的子树替换为叶结点,则所得决策树的验证集精度分别为 71.4% 与

42.9%,均未得到提高,于是它们被保留。 最终,基于后剪枝策略所⽣成的决策树就如上图所示,

其验证集精度为 71.4%。 

对⽐两种剪枝⽅法:

后剪枝决策树通常⽐预剪枝决策树保留了更多的分⽀。

⼀般情形下,后剪枝决策树的⽋拟合⻛险很小,泛化性能往往优于预剪枝决策树。 但后剪枝过程

是在⽣成完全决策树之后进⾏的。 并且要自底向上地对树中的所有非叶结点进行逐⼀考察,因此

其训练时间开销比未剪枝决策树和预剪枝决策树都要⼤得多。

4. 剪枝的方法

Reduced-Error Pruning(REP,错误率降低剪枝):

REP方法是一种比较简单的后剪枝的方法,在该方法中,可用的数据被分成两个样例集合:一个训

练集用来形成学习到的决策树,一个分离的验证集用来评估这个决策树在后续数据上的精度,确切

地说是用来评估修剪这个决策树的影响。 这个方法的动机是:即使学习器可能会被训练集中的随

机错误和巧合规律所误导,但验证集合不大可能表现出同样的随机波动。所以验证集可以用来对过

度拟合训练集中的虚假特征提供防护检验。

该剪枝方法考虑将树上的每个节点作为修剪的候选对象,决定是否修剪这个结点由如下步骤组成:

①删除以此结点为根的子树

②使其成为叶子结点

③赋予该结点关联的训练数据的最常见分类

④当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该结点

训练集合可能过拟合,使用验证集合数据能够对其进行修正,反复进行上面的操作,从底向上的处

理结点,删除那些能够最大限度的提高验证集合的精度的结点,直到进一步修剪有害为止(有害是

指修剪会减低验证集合的精度)。

Pesimistic-Error Pruning(PEP,悲观错误剪枝):

悲观错误剪枝法是根据剪枝前后的错误率来判定子树的修剪。该方法引入了统计学上连续修正的概

念弥补REP中的缺陷,在评价子树的训练错误公式中添加了一个常数,假定每个叶子结点都自动对

实例的某个部分进行错误的分类。 把一棵子树(具有多个叶子节点)的分类用一个叶子节点来替

代的话,在训练集上的误判率肯定是上升的,但是在新数据上不一定。于是,需要把子树的误判计

算加上一个经验性的惩罚因子。

对于一个叶子节点,它覆盖了N个样本,其中有E个错误,那么该叶子节点的错误率为

(E+0.5)/N。这个0.5就是惩罚因子,那么一棵子树,它有L个叶子节点,那么该子树的误判率估

计为

这样的话,可以看到一棵子树虽然具有多个子节点,但由于加上了惩罚因子,所以子树的误判率计

算未必占到便宜。剪枝后内部节点变成了叶子节点,其误判个数J也需要加上一个惩罚因子,变成

J+0.5 。那么子树是否可以被剪枝就取决于剪枝后的错误J+0.5在

的标准误差内。对于样本的误差率e,可以根据经验把它估计成各种各样的分布模型,比如是二项

式分布,比如是正态分布。 那么一棵树错误分类一个样本值为1,正确分类一个样本值为0,该树

错误分类的概率(误判率)为e(e为分布的固有属性,可以通过

 统计出来),那么树的误判次数就是伯努利分布,就可以估计出该树的误判次数均值和标准差:

把子树替换成叶子节点后,该叶子的误判次数也是一个伯努利分布,其概率误判率e为(E+0.5)/N,

因此叶子节点的误判次数均值为 

使用训练数据,子树总是比替换为一个叶节点后产生的误差小, 但是使用校正后有误差计算方法

却并非如此,当子树的误判个数大过对应叶节点的误判个数一个标准差之后,就决定剪枝:

这个条件就是剪枝的标准。当然并不一定非要大一个标准差,可以给定任意的置信区间,设定一定

的显著性因子,就可以估算出误判次数的上下界。 

比如:

T4这棵子树的误差率:(7+0.5*3)/16=0.53125

子树误判次数的标准误差:

子树替换为一个叶节点后,其误判个数为:7+0.5=7.5

因为8.5+1.996>7.5,所以决定将子树T4替换这一个叶子节点。 

Cost-Complexity Pruning(CCP,代价复杂度剪枝):

该算法为子树 Tt 定义了代价(cost)和复杂度(complexity),以及一个可由用户设置的衡量代价

与复杂度之间关系的参数α,其中,代价指在剪枝过程中因子树 Tt 被叶节点替代而增加的错分样

本,复杂度表示剪枝后子树 Tt 减少的叶结点数,α则表示剪枝后树的复杂度降低程度与代价间的关

系,定义为 

其中, |N1|:子树 Tt 中的叶节点数;

R(t):结点 t 的错误代价,计算公式为R(t)= r(t)*p(t), r(t)为结点 t 的错分样本率,

p(t)为落入结点 t 的样本占所有样本的比例;

R(Tt):子树 Tt 错误代价,计算公式为R(Tt)=∑R(i),i为子树 Tt 的叶节点。

比如:

我们以非叶结点 T4 为例,假设已有的数据有60条,那么 R(t)=r(t)*p(t)=(7/16)*(16/60)=7/60

R(Tt)=∑R(i)=(2/5)*(5/60)+(0/2)*(2/60)+(3/9)*(9/60)=5/60

α=(R(t)-R(Tt))/(|N1|-1)=1/60 

CCP剪枝算法分为两个步骤:

①对于完全决策树 T 的每个非叶结点计算 α 值,循环剪掉具有最小 α 值的子树,直到剩下根节

点。在该步可得到一系列的剪枝树{T0, T1,T2......Tm}。其中 T0 为原有的完全决策树,Tm为

根结点,Ti+1为对 Ti 进行剪枝的结果;

②从子树序列中,根据真实的误差估计选择最佳决策树。

通常使用1-SE(1 standard error of minimum error)规则从步骤1产生的一系列剪枝树中选择一棵

最佳的剪枝决策树。方法为,假定 一个含有N'个样本的剪枝集,分别用在步骤1中产生的剪枝树

Ti 对该剪枝集进行分类,记 Ti 所有叶结点上长生的错分样本数为Ei,令E'=min {Ei},定义E'

的标准错误为:

所得的最佳剪枝树 Tbest 是满足条件 Ei ≤ E'+ SE(E')且包含的接点数最少的那棵剪枝树 Ti。

几种后剪枝方法的比较:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/67566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装部署ElasticSearch(ES)

文章目录 安装前准备创建挂载目录授权相关权限创建elasticsearch.yml文件 拉取镜像运行容器查看运行情况测试 安装前准备 创建挂载目录 用于在宿主机挂载日志,数据等内容 创建/opt/es/data目录 创建/opt/es/logs目录 创建/opt/es/plugins目录 创建/opt/es/conf目录…

MYSQL调优之思路----sql语句和索引调优

MySQL数据库性能优化包括综合多方面因素,应根据实际的业务情况制定科学、合理的调优方案进行测试调优 文章目录 MySQL性能优化1 优化介绍1.2 优化要考虑的问题2.1 优化可能带来的问题2.2 优化的需求2.3 优化由谁参与2.4 优化的方向2.5 优化的维度 1.2数据库使用优化…

【力扣周赛】第 361 场周赛(⭐前缀和+哈希表 树上倍增、LCA⭐)

文章目录 竞赛链接Q1:7020. 统计对称整数的数目竞赛时代码——枚举预处理 Q2:8040. 生成特殊数字的最少操作(倒序遍历、贪心)竞赛时代码——检查0、00、25、50、75 Q3:2845. 统计趣味子数组的数目竞赛时代码——前缀和…

【业务功能篇96】微服务-springcloud-springboot-认证服务-登录注册功能-Auth2.0-分布式session

5.登录功能 通过最基础的登录操作来完成登录处理 登录页面处理 认证服务的处理 /*** 注册的方法* return*/PostMapping("/login")public String login(LoginVo loginVo , RedirectAttributes redirectAttributes){R r memberFeginService.login(loginVo);if(r.getC…

thinkphp6 入门(5)-- 模型是什么 怎么用

一、模型 MVC架构 之前开发一个功能,后端为在控制器(C)中写 php SQL,前端为在页面(V)中写html css js,这就形成了 VC 架构。 但是发现,相同的数据逻辑(SQL&#xf…

IntelliJ IDEA的远程开发(Remote Development)

DEA的远程开发功能,可以将本地的编译、构建、调试、运行等工作都放在远程服务器上执行,而本地仅运行客户端软件进行常规的开发操作即可,官方给出的逻辑图如下,可见通过本地的IDE和服务器上的IDE backend将本地电脑和服务器打通&am…

达梦8 在CentOS 系统下静默安装

确认系统参数 [rootlocalhost ~]# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited【1048576(即 1GB)以上或 unlimited】 scheduling priority (-e) 0 file size (blocks, -f) unlimite…

webpack5 (三)

webpack 高级配置 其实就是对 webpack 进行优化,让代码在编译/运行时性能更好 1. 提升开发体验 2. 提升打包构建速度 3. 减少代码体积 4. 优化代码运行性能 一、提升开发体验 sourcemap 在编译打包后所有的 css 和 js 都合并为了一个文件,并多了很多…

APS系统设计经验分享(时间推导II - 2023.09)

在前一篇关于APS系统设计分享文章(《APS系统设计经验分享(时间推导 - 2023.03)》)中,我们提到将会分享使用OptaPlanner作为规划引擎开发APS系统过程中,遇到的一些时间相关的设计建议与异常情况分析。后来一直忙于项目工作,直到现在才想起仍欠…

CC-TAIX01 HONEYWELL 霍尼韦尔连接工厂热智商远程监测系统

CC-TAIX01 HONEYWELL 霍尼韦尔连接工厂热智商远程监测系统 -霍尼韦尔宣布霍尼韦尔连接工厂热智商,一种基于云的远程监测系统,旨在监测和管理关键的热过程数据。这是霍尼韦尔资产绩效管理(APM)投资组合的一部分。 热智商是工业和商业热应用的远程监测解决方案。它将燃烧设备连…

Flink基础实操-计算单词出现次数

🥇🥇【大数据学习记录篇】-持续更新中~🥇🥇 个人主页:beixi 本文章收录于专栏(点击传送):【大数据学习】 💓💓持续更新中,感谢各位前辈朋友们支持…

【云原生】容器编排工具Kubernetes

目录 一、 K8S介绍 官网地址: 1.1docker编排与k8s编排相比 1.2特性 1.3功能 二、K8S重要组件 2.1核心组件 (1)Kube-apiserver (2)Kube-controller-manager (3)Kube-scheduler &#x…

DevOps管理软件生命周期

整体的软件开发流程 PLAN:开发团队根据客户的目标制定开发计划 CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。GIT,SVN BUILD:编码完成后,需要将代码构建并且运行。MAVEN TEST:成功构建…

【性能优化】聊聊性能优化那些事

针对于互联网应用来说,性能优化其实就是一直需要做的事情,因为系统响应慢,是非常影响用户的体验,可能回造成用户流失。所以对于性能非常重要。最近正好接到一个性能优化的需求,需要对所负责的系统进行性能提升。目前接…

Windows环境下RabbitMQ下载安装

一、准备安装文件 1、下载Erlang 登录网站Downloads - Erlang/OTP,选择“Download Windows installer”,如下图所示: 弹出框中,选在下载保存地址,保存文件,如下图所示: 2、下载RabbitMQ 登录…

ElasticSearch简介

一、基本概念 1、Index(索引) 动词,相当于 MySQL 中的 insert; 名词,相当于 MySQL 中的 Database 2、Type(类型) 在 Index(索引)中,可以定义一个或多个类…

无需公网IP,在家SSH远程连接公司内网服务器「cpolar内网穿透」

文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。…

unity tolua热更新框架教程(2)

Lua启动流程 增加脚本luamain,继承luaclient 建立第一个场景GameMain,在对象GameMain挂载脚本LuaMain,启动场景 看到打印,lua被成功加载 lua入口及调用堆栈 这里会执行main.lua文件的main函数 C#接口导出 在此处配置C#导出的代码 …

【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网(重点) 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影…

【51单片机实验笔记】声学篇(一) 蜂鸣器基本控制

目录 前言硬件介绍PWM基础蜂鸣器简介 原理图分析蜂鸣器驱动电路 软件实现蜂鸣器短鸣蜂鸣器功能封装 总结 前言 蜂鸣器在生活中的应用实则相当广泛。通过本章你将学会制造噪声 (笑~)你将学会驱动它们,并发出响声。 硬件介绍 PWM基础 占空比…