决策树剪枝算法-悲观剪枝算法(PEP)
前言
在机器学习经典算法中,决策树算法的重要性想必大家都是知道的。不管是ID3算法还是比如C4.5算法等等,都面临一个问题,就是通过直接生成的完全决策树对于训练样本来说是“过度拟合”的,说白了是太精确了。由于完全决策树对训练样本的特征描述得“过于精确” ,无法实现对新样本的合理分析, 所以此时它不是一棵分析新数据的最佳决策树。解决这个问题的方法就是对决策树进行剪枝,剪去影响预测精度的分支。常见的剪枝策略有预剪枝(pre -pruning)技术和后剪枝(post -pruning )技术两种。预剪枝技术主要是通过建立某些规则限制决策树的充分生长, 后剪枝技术则是待决策树充分生长完毕后再进行剪枝。由于预剪枝技术运用较少,本系列将着重介绍后剪枝技术,本文将介绍的是悲观剪枝技术。
一、统计学相关知识复习
1、置信区间:
设θ'在大样本下服从E(θ') = θ, 标准误差为σ'的正态分布,那么θ的(1 - α)100%置信区间是:
θ' +/- (Zα/2) σ'
2、二项式概率分布:
均值和方差分别是u = np, σ2=npq ,其中p=每次实验成功的概率, q=1-p。
3、二项分布的正态逼近
如果np>=4 且nq>=4 ,二项概率分布p(y)逼近于正态分布。如下图

可以看到P(Y<=2)是在正态曲线下Y=2.5的左端面积。注意到Y=2的左端面积是不合适的,因为它省略了相应于Y=2的一半概率的长方形。为了修正,用连续概率分布去近似离散概率分布,在计算概率之前我们需要将2增加0.5。值0.5称为二项概率分布近似的连续性修正因子,因此
P(Y<=a) 约等于 P(Z< (a+0.5 - np/ ( npq)1/2) );
P(Y>=a) 约等于 P(Z> (a-0.5 - np/ ( npq)1/2) )
二、剪枝过程
对于后剪枝技术,在决策树形成后,最先要做的就是剪枝。后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则(majority class criterion)确定。所谓大多数原则,是指剪枝过程中, 将一些子树删除而用叶节点代替,这个叶节点所标识的类别用这棵子树中大多数训练样本所属的类别来标识,所标识的类称为majority class ,(majority class 在很多英文文献中也多次出现)。
三、悲观剪枝--Pessimistic Error Pruning (PEP)
PEP后剪枝技术是由大师Quinlan提出的。它不需要像REP(错误率降低修剪)样,需要用部分样本作为测试数据,而是完全使用训练数据来生成决策树,又用这些训练数据来完成剪枝。决策树生成和剪枝都使用训练集, 所以会产生错分。现在我们先来介绍几个定义。
T1为决策树T的所有内部节点(非叶子节点),
T2为决策树T的所有叶子节点,
T3为T的所有节点,有T3=T1∪T2,
n(t)为t的所有样本数,
ni(t)为t中类别i的所有样本数,
e(t)为t中不属于节点t所标识类别的样本数
在剪枝时,我们使用
r(t)=e(t)/n(t)
就是当节点被剪枝后在训练集上的错误率,而
, 其中s为t节点的叶子节点。
在此,我们把错误分布看成是二项式分布,由上面“二项分布的正态逼近”相关介绍知道,上面的式子是有偏差的,因此需要连续性修正因子来矫正数据,有
r‘(t)=[e(t) + 1/2]/n(t)
和
, 其中s为t节点的叶子节点,你不认识的那个符号为 t的所有叶子节点的数目
为了简单,我们就只使用错误数目而不是错误率了,如下
e'(t) = [e(t) + 1/2]

接着求e'(Tt)的标准差,由于误差近似看成是二项式分布,根据u = np, σ2=npq可以得到

当节点t满足

则Tt就会被裁减掉。
四、总结
在学习机器学习中,由于涉及的知识比较多,面又很广,所以大家一定要把数学,统计学,算法等相关知识学透彻,多总结归纳。而且这些知识一般比较晦涩难懂,但看别人的博客往往由于他人对知识点的理解有误,而导致对读者本人的误导,且博客是不具权威,不保证正确的,所以对机器学习这种严谨的学科更是需要多参考,多阅读特别是文献,甚至是算法原著者的论文。同时对我理解有误的地方,欢迎大家指出,再次表示感谢了。
五、推荐阅读
想了解其他剪枝算法(REP, MEP, EBP)的可以参考这篇文章http://52weis.com/articles.html?id=718_21
六、参考文献
A Comparative Analysis of Methods for Pruning Decision Trees 1997(ISSUE)
THE EFFECTS OF PRUNING METHODS ON THE PREDICTIVE ACCURACY OF INDUCED(ISSUE)
决策树后剪枝算法的研究 范 洁 杨岳湘(ISSUE)
决策树剪枝方法的比较 魏红宁 2005(ISSUE)
悲观剪枝算法在学生成绩决策树中的应用 李萍 2014(ISSUE)
所有文章均系原创,转载请注明作者和本文链接
决策树剪枝算法-悲观剪枝算法(PEP)的更多相关文章
- 就是要你明白机器学习系列--决策树算法之悲观剪枝算法(PEP)
前言 在机器学习经典算法中,决策树算法的重要性想必大家都是知道的.不管是ID3算法还是比如C4.5算法等等,都面临一个问题,就是通过直接生成的完全决策树对于训练样本来说是“过度拟合”的,说白了是太精确 ...
- 决策树之PEP(悲观剪枝)
引用这2篇文章 https://blog.csdn.net/taoqick/article/details/72818496 https://www.open-open.com/lib/view/op ...
- 决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)
1. 1.问题的引入 2.一个实例 3.基本概念 4.ID3 5.C4.5 6.CART 7.随机森林 2. 我们应该设计什么的算法,使得计算机对贷款申请人员的申请信息自动进行分类,以决定能否贷款? ...
- 每周一道数据结构(四)A*算法&博弈树α-β剪枝
A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在这里感谢面试我的那位工程师~~ A* ...
- A*算法&博弈树α-β剪枝
A*算法&博弈树α-β剪枝 A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在 ...
- 从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看
从决策树学习谈到贝叶斯分类算法.EM.HMM 引言 最近在面试中,除了基础 & 算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全 ...
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
从决策树学习谈到贝叶斯分类算法.EM.HMM (Machine Learning & Recommend Search交流新群:172114338) 引言 log ...
- 机器学习总结(八)决策树ID3,C4.5算法,CART算法
本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...
- (ZT)算法杂货铺——分类算法之决策树(Decision tree)
https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html 3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分 ...
随机推荐
- Python Module_pdb_DEBUG 方法
目录 目录 pdb pdb 的 Debug 方式 pdb 的调试指令 示例 IPython 自带的 Debug 工具 ipdb pdb pdb 是 Python 自带的程序包,为 Python 程序提 ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_2 Mybatis中编写dao实现类的使用-保存操作
再完善.saveUser的方法 测试保存的操作 报错了 SqlSession的insert的源码 我们在执行Insert的时候,并没有把user对象传过去 usersex改成sex 再次测试
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_7 Mybatis中参数的深入-使用实体类的包装对象作为查询条件
pojo对象就是实体类 综合查询-实体类包装起来做查询 新建实体类QueryVo 提供一个User对象属性,并生成getter和setter 测试 修改dao接口中的返回类型为List<User ...
- java 发送 http post 和 get 请求(利用unirest)
调用服务器端的接口在前端调用,但是我们也会经常遇到在服务器后端调用接口的情况,网上的例子大部分都是用 jdk 原生的 URL realUrl = new URL(url); URLConnection ...
- yield(),sleep()以及wait()的区别
往往混淆了这三个函数的使用. 从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列).并且在某一时刻cpu只为ready queue中位于队列头部的线程服务. 但是当前正在被服务的 ...
- 【SQL系列】深入浅出数据仓库中SQL性能优化之Hive篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]深入浅出数据仓库中SQL性能优化之 ...
- python 并发编程 多进程 守护进程
一 守护进程 主进程创建子进程目的是:主进程有一个任务需要并发执行,那开启子进程帮我并发执行任务 主进程创建子进程,然后将该进程设置成守护自己的进程 关于守护进程需要强调两点: 其一:守护进程会在主进 ...
- 第二周JAVA总结
学海无涯,在学习这件事情上得用点心了
- 使用批处理命令注册运行mysql数据库,无需注册mysql服务,可以在任意电脑登录使用
使用批处理命令初始化和开启mysql服务,移植数据库之后可以直接运行访问,对于学习数据库的人来说特别的方便哦. 我们可以从mysql官网下载官方社区版本的mysql: 这里使用之前下载的8.0.15来 ...
- UUID与System.currentTimeMillis()产生一个新文件名的工具类
1.FileUtils.java package Utils.GenerateNewFileName; import java.util.UUID; public class FileUtils { ...