Error Based Pruning剪枝算法、代码实现与举例
EBP(Error Based Pruning):
下列算法转载自链接:
weka3初体验以J48(C4.5)构造决策树以及setoptions各参赛含义
EBP算法的具体实现在
http://www.rulequest.com/Personal/c4.5r8.tar.gz
的prune.c文件中,由于是C写的,所以我写了个EBP剪枝算法的python接口:
https://github.com/appleyuchi/Decision_Tree_Prune
下面的BranchErrors、LeafErrors + ExtraLeafErrors、BranchErrors来自代码中的prune.c中的变量
•第一步:计算叶节点的错分样本率估计的置信区间上限U
•第二步:计算叶节点的预测错分样本数
–叶节点的预测错分样本数=到达该叶节点的样本数*该叶节点的预测错分样本率U
•第三步:判断是否剪枝及如何剪枝
–分别计算三种预测错分样本数:
•计算子树t的所有叶节点预测错分样本数之和,记为TreeErrors
•计算子树t被剪枝以叶节点代替时的预测错分样本数,记为LeafErrors + ExtraLeafErrors
•计算子树t的最大分枝的预测错分样本数,记为BranchErrors
–比较TreeErrors,LeafErrors + ExtraLeafErrors ,BranchErrors,如下:
•TreeErrors最小时,不剪枝
•LeafErrors + ExtraLeafErrors 最小时,进行剪枝,以一个叶节点代替t
•BranchErrors最小时,采用“嫁接”(grafting)策略,即用这个最大分枝代替t
EBP算法的最早提出在
<Quinlan的C4.5:program for machine learning>
的37页,
提出的时候没有提到嫁接,分析案例時39頁提到了嫁接。
解释下嫁接:
1.嫁接不是整个子树剪掉,而是减掉其中的一些树枝。
2.当测试数据到达叶子节点的上面一个分割点的时候,如果树枝的属性取值与该测试数据的属性取值不一致,那么此时测试数据的类别就以
“最初根节点到当前分割节点”为止的数据集的比例最大的类别作为该测试数据的判定类别。
具体实例:
<Quinlan的C4.5:program for machine learning>
P37-39
上述结果可以采用上面的http://www.rulequest.com/Personal/c4.5r8.tar.gz
来重現,使用vote数据集,运行方法:
1)c4.5.c中把DF改为vote,
并且在当前路径下放置vote.names,vote.data两个文件
2)make all
3)./c4.5
运行过程分析:
总共进行了3次剪枝,1次嫁接。
其中:
physician fee free=n:这个分支进行了2次剪枝,
1step:对adoption of the budget resolution=n进行剪枝
2step:对pysician fee feeze=n进行剪枝
注意是Bottom-Top
physician fee free=y:这个分支进行了1次剪枝
physician fee free=u:这个分支进行了1次嫁接
注意整个过程是down-top方式遍历
例如physician fee free=n这个分支的剪枝过程就体现down-top
EBP是PEP更加悲观的算法,所谓的“悲观”到底体现在哪里?
例如16条数据中,一条数据预测错误,那么错误率是116\frac{1}{16}161
根据这个实际错误率,使用置信区间25%估算得到“悲观错误率”(pessimistic error rate):
U0.25(1,16)=0.157U_{0.25}(1,16)=0.157U0.25(1,16)=0.157
然后用这个"悲观错误率"来预测上面的悲观错误数量,
再把悲观错误叠加到实际错误数量上,然后再进行“维持原样”、“剪枝”、“嫁接”的“悲观错误数量”进行比较,哪个的“悲观错误数量”最小就用哪种。
关于U0.25(1,16)=0.157U_{0.25}(1,16)=0.157U0.25(1,16)=0.157的悲观错误率、悲觀錯誤數量的估算方法如下:
https://blog.csdn.net/appleyuchi/article/details/83834101
另外J48的剪枝算法是EBP和REP,不是PEP,
Quinlan的C4.5-Release8的实现版本中,
http://www.rulequest.com/Personal/c4.5r8.tar.gz
使用的剪枝算法也是EBP,不是PEP。
Error Based Pruning剪枝算法、代码实现与举例相关推荐
- Minimax 和 Alpha-beta 剪枝算法简介,及以此实现的井字棋游戏(Tic-tac-toe)
前段时间用 React 写了个2048 游戏来练练手,准备用来回顾下 React 相关的各种技术,以及试验一下新技术.在写这个2048的过程中,我考虑是否可以在其中加入一个 AI 算法来自动进行游戏, ...
- Python实现博弈树minmax补全与α-β剪枝算法脚本简介
文章目录 前言 一.题目 二.使用步骤 1.递归构建博弈树 2.α-β剪枝算法 3.博弈树可视化 4.测试实例 5.结果展示 6.全部代码 总结 前言 使用Python编程实现博弈树的构建,实现利用M ...
- 收藏 | 一文总结70篇论文,帮你透彻理解神经网络的剪枝算法
来源:DeepHub IMBA本文约9500字,建议阅读10+分钟 本文为你详细介绍神经网络剪枝结构.剪枝标准和剪枝方法. 无论是在计算机视觉.自然语言处理还是图像生成方面,深度神经网络目前表现出来的 ...
- 决策树后剪枝算法(四)最小错误剪枝MEP
决策树后剪枝算法(一)代价复杂度剪枝CPP 决策树后剪枝算法(二)错误率降低剪枝REP 决策树后剪枝算法(三)悲观错误剪枝PEP 决策树后剪枝算法(四)最小 ...
- 我总结了70篇论文的方法,帮你透彻理解神经网络的剪枝算法
无论是在计算机视觉.自然语言处理还是图像生成方面,深度神经网络目前表现出来的性能都是最先进的.然而,它们在计算能力.内存或能源消耗方面的成本可能令人望而却步,这使得大部份公司的因为有限的硬件资源而完全 ...
- 决策树剪枝算法:REP/PEP/CCP算法
一颗完全生长的决策树会面临一个严重的问题--过拟合,因此我们需要剪掉一些枝叶来提高决策树的泛化能力.即使不存在过拟合,如果样本数量和分类数量是一个海量的级别,也需要预剪枝,因为计算资源不足以支撑生成完 ...
- 决策树后剪枝算法(一)代价复杂度剪枝CPP
决策树后剪枝算法(一)代价复杂度剪枝CPP 决策树后剪枝算法(二)错误率降低剪枝REP 决策树后剪枝算法(三)悲观错误剪枝PEP 决策树后剪枝算法(四)最小 ...
- 决策树准确率低原因_机器学习决策树算法--剪枝算法
一.剪枝算法决策树生成算法递归地产生决策树,直到不能继续下去为止.这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象.过拟合的原因在于学习时过多地考虑如何 ...
- 运行iDT算法代码及后续特征编码
DT&IDT算法应该算是行为识别领域中经典中的经典了,自从13年提出以来,在HMDB-51和UCF-101等若干个数据库上得到了非常好的效果,虽然DT&IDT算法做不过深度学习,但是由 ...
最新文章
- 3Dslicer1:入门及基本控制
- class mywnd : pubic qwidget是什么意思_学了这么久java反射,你知道class.forName和classloader的区别吗?...
- 【MFC系列-第19天】初步认识GDI绘图技术
- Android studio中获取按钮组的信息如何循环遍历
- SpringBoot2.5.4发送邮件4种方式
- python代码技巧_让你python代码更快的3个小技巧
- echart 地图 某个地区_一站式解决echarts实现区域地图
- hadoop 开启防火墙_hadoop上搭建hive
- 博文视点大讲堂20期:Windows 7来了——知道你所不知道的Windows 7
- 【php毕业设计】基于php+mysql的学生签到考勤系统设计与实现(毕业论文+程序源码)——学生签到考勤系统
- 数据库设计之需求分析
- 厦门大学2019年数学分析考研试题
- Html学习(二)font 加粗 斜体 下划线标签学习
- 华为网络实验--动态路由器+RIP路由协议配置及验证
- 快看,他纯用css绘制出了嫦娥手捧的月兔,关键还能飞,牛
- 软考系统架构师倒计时第6天
- 嵌入式ARM64 Linux内核FIT uimage方式启动
- 东北大学应用数理统计第三章知识点总结——假设检验
- java 农历 天文,“中国天眼”的新发现 终结天文界持续多年的一场争论
- 珍宝鸭的力扣练习(1):字符串特殊方法合集
热门文章
- Python学习笔记- Python threading模块
- MFC窗口颜色的设置
- 基于php的地铁查询系统,HTML5 Canvas实现交互式地铁线路图
- 实体安全主要指计算机及网络硬件设备,计算机安全中的实体安全主要是指什么?...
- 国产手机都会用鸿蒙吗,华为鸿蒙系统已经发布,小米等国产手机会使用鸿蒙系统吗?来看看...
- 大学暑假第四周进度报告
- 阿里微服务专家自己手写Spring Boot 实现一个简单的自动配置模块
- 和QT零距离接触的意义是什么
- 多路由器环境配置的一些小技巧(达内)
- Lesson 1:单线程 Socket Communications(一)