决策树的剪枝(MEP,REP,PEP,CCP)
版权声明:本文为博主原创文章,转载请著名出处 https://blog.csdn.net/sheepy123/article/details/89850764
一,决策树剪枝
1. MEP(minimum error pruning)
MEP方法的基本思路是采用自底向上的方式,对于树中每个非叶节点。首先计算该节点的误差Er(t)E_r(t)Er(t),然后,计算该节点每个分支的误差Er(Tt)E_r(T_t)Er(Tt),并且加权相加,权为每个分支拥有的训练样本比例。如果Er(t)E_r(t)Er(t)大于∑Er(Tt)\sum E_r(T_t)∑Er(Tt),则保留该子树;否则,剪裁它。
通常,Er(t)E_r(t)Er(t)的计算采用公式:
Er(t)=n(t)−nc(t)+(k−1)n(t)+kE_r(t) = \frac{n(t)-n_c(t)+(k-1)}{n(t)+k} Er(t)=n(t)+kn(t)−nc(t)+(k−1)
其中:n(t)为节点t中的样本总数;nc(t)n_c(t)nc(t)为t中主类的样本数目;k为类数目
2. REP(Reduced-Error Pruning 错误率降低剪枝)
REP方法是一种比较简单的后剪枝方法。在该方法中,数据被分成两个样例的集合:训练集和验证集。训练集用来评估这个决策树在后续数据上的精度。
判断是否剪枝的依据是精度。
精度是指对于某一个节点,测试集在剪枝前后正确分类的个数。
首先计算节点t的误差:Er(t)E_r(t)Er(t),然后计算每个节点的误差Er(Tt)E_r(T_t)Er(Tt)并相加。如果Er(t)E_r(t)Er(t)大于∑Er(Tt)\sum E_r(T_t)∑Er(Tt),则保留该子树;否则,剪裁它。
Er(t)=n(t)−nc(t)E_r(t) = n(t)-n_c(t) Er(t)=n(t)−nc(t)
其中:n(t)为节点t中的样本总数;nc(t)n_c(t)nc(t)为t中主类的样本数目
3. PEP(Pesimistic-Error Pruning 悲观错误剪枝)
PEP是根据剪枝前后的错误率来判定子树的修剪。
该方法引入了统计学上连续修正的概念弥补REP中的缺陷,在评价子树的训练错误公式中添加了一个常数,假定每个叶子节点都自动对实列的某个部分进行错误的分类。
把一颗子树(具有多个叶子节点)的分类用一个叶子节点来替代的话,在训练集上的误判率肯定是上升的,但是在新数据上不一定。于是我们需要把子树的误判计算加上一个经验性的惩罚因子。对于一颗叶子节点,它覆盖了N个样本,其中有E个错误,那么该叶子节点的错误率为(E+0.5)/N。这个0.5就是惩罚因子,那么一颗子树,它有L个叶子节点,那么该子树的误判率估计为:
e=∑Ei+0.5∗L∑Nie = \frac{\sum E_i + 0.5*L}{\sum N_i} e=∑Ni∑Ei+0.5∗L
其中:EiE_iEi为该节点错误的个数,NiN_iNi为该节点样本的个数,L为叶子节点个数
剪枝后,其概率误判率e为(E+0.5)/N,因此叶子节点的误判次数均值EtE_tEt为:
et=E+0.5Ne_t = \frac{E + 0.5}{N} et=NE+0.5
Et=N∗et=N∗E+0.5N=E+0.5E_t = N*e_t=N*\frac{E + 0.5}{N}=E+0.5 Et=N∗et=N∗NE+0.5=E+0.5
剪枝前,误判均值E和标准差:
N=∑NiN = \sum N_i N=∑Ni
eT=∑Ei+0.5∗L∑Ni=∑Ei+0.5∗LNe_{_T} = \frac{\sum E_i + 0.5*L}{\sum N_i}=\frac{\sum E_i + 0.5*L}{N} eT=∑Ni∑Ei+0.5∗L=N∑Ei+0.5∗L
ET=N∗eT=N∗∑Ei+0.5∗LN=∑Ei+0.5∗LE_{_T} = N*e_{_T}=N*\frac{\sum E_i + 0.5*L}{N}=\sum E_i + 0.5*L ET=N∗eT=N∗N∑Ei+0.5∗L=∑Ei+0.5∗L
δ=N∗eT∗(1−eT)=ET∗(N−ET)\delta = \sqrt{N*e_{_T}*(1-e_{_T})}= \sqrt{E_{_T}*(N-E_{_T})} δ=N∗eT∗(1−eT)=ET∗(N−ET)
判断是否剪枝条件:
剪枝:
Et<ETi+δE_t < E_{_{T_i}} + \delta Et<ETi+δ
例子:
注:"T4"是节点, 9 和7 分别是类1和类2的个数
4.CCP(Cost-Complexity Pruning 代价复杂度剪枝)
CCP算法为子树TtT_tTt 定义了代价和复杂度,以及一个衡量代价与复杂度之间关系的参数α。
代价指的是在剪枝过程中因子树TtT_tTt 被叶节点替代而增加的错分样本;
复杂度表示剪枝后子树TtT_tTt 减少的叶结点数;
α则表示剪枝后树的复杂度降低程度与代价间的关系,定义为:
α=C(t)−C(Tt)∣Tt∣−1α = \frac{C(t)-C(T_t)}{|T_t|-1} α=∣Tt∣−1C(t)−C(Tt)
注:
C(t)为节点的预测误差:
C(t)=EtNC(t) = \frac{E_t}{N} C(t)=NEt
C(Tt)C(T_t)C(Tt)为子树TtT_tTt的预测误差:
C(Tt)=ETtNC(T_t) = \frac{E_{T_t}}{N} C(Tt)=NETt
∣Tt∣|T_t|∣Tt∣为TtT_tTt子树的节点个数
CCP算法可以分为两个步骤:
Step 1:
按照上述公式从下到上计算每一个非叶节点的α\alphaα值,然后每一次都剪掉具有最小α\alphaα值的子树。
从而得到一个集合{T0,T1,T2,…,TM} ,其中,T0T_0T0表示完整的决策树,TMT_MTM表示根节点
Step 2:
根据真实的错误率在集合{T0,T1,T2,…,TM} 选出一个最好的决策树
决策树的剪枝(MEP,REP,PEP,CCP)相关推荐
- 决策树剪枝算法:REP/PEP/CCP算法
一颗完全生长的决策树会面临一个严重的问题--过拟合,因此我们需要剪掉一些枝叶来提高决策树的泛化能力.即使不存在过拟合,如果样本数量和分类数量是一个海量的级别,也需要预剪枝,因为计算资源不足以支撑生成完 ...
- 决策树后剪枝算法(四)最小错误剪枝MEP
决策树后剪枝算法(一)代价复杂度剪枝CPP 决策树后剪枝算法(二)错误率降低剪枝REP 决策树后剪枝算法(三)悲观错误剪枝PEP 决策树后剪枝算法(四)最小 ...
- 决策树后剪枝算法(一)代价复杂度剪枝CPP
决策树后剪枝算法(一)代价复杂度剪枝CPP 决策树后剪枝算法(二)错误率降低剪枝REP 决策树后剪枝算法(三)悲观错误剪枝PEP 决策树后剪枝算法(四)最小 ...
- 细讲sklearn决策树后剪枝(带例子)
<老饼讲解机器学习>http://ml.bbbdata.com/teach#103 目录 一.CCP后剪枝简介 二.剪枝操作过程 (1) 查看CCP路径 (2)根据CCP路径剪树 为预防模 ...
- 二叉树剪枝_决策树,生成剪枝,CART算法
决策树 1. 原理 1.1 模型简介 决策树是一种基本的回归和分类算法.在分类问题中,可以认为是一系列 if-then 规则的几何.决策树学通常包括三个步骤:特征选择,决策树的生成, 决策树的修剪. ...
- sklearn决策树预剪枝
<老饼讲解机器学习>http://ml.bbbdata.com/teach#102 目录 一.预剪枝即调参 二.调参方法 (1) 默认值预观察生长的树 (2) 参数限制节点过分生长 为预防 ...
- 决策树——预剪枝和后剪枝
一. 为什么要剪枝 1.未剪枝存在的问题 决策树生成算法递归地产生决策树,直到不能继续下去为止.这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即容易出现过拟合现象.解 ...
- python决策树剪枝_决策树及其剪枝原理
后剪枝算法 后剪枝算法有很多种,这里简要总结如下: Reduced-Error Pruning (REP,错误率降低剪枝) 这个思路很直接,完全的决策树不是过度拟合么,我再搞一个测试数据集来纠正它.对 ...
- 机器学习基础(五十一)—— 决策树的剪枝
使用一般的寻量方法得到的决策树会遇到一个问题,那就是决策树可能会变得过拟合(overfitted)--也就是说,它可能会变得过分针对训练数据.专门针对训练集所创建出来的分支,其熵值与真实情况相比,可能 ...
最新文章
- 日记-致我那易逝的时光
- iPhone 12将首次加入屏下指纹?都是为它铺路?
- 【iOS】使用storyboard界面跳转报错:unrecognized selector sent to instance 0x7
- java 自动补齐数值至指定位数
- java工厂模式和抽象工厂_Java中的抽象工厂设计模式
- 3732 Ahui Writes Word
- 材料力学考研可以用计算机吗,2020海南大学材料力学专业超详细考研经验分享...
- 杨玲 徐思 《面向对象程序设计(java)》第十一周学习总结
- java hibernate 详解_hibernate详解一
- CST设计接收贴片天线
- Appium自动化测试基础 — uiautomatorviewer定位工具
- C++中string.find()函数与string::npos
- 杰理之音频测试说明【篇】
- mysql如何用sql添加字段如何设置字符集和排序规则
- vc获取计算机用户名,vc获取计算机名和ip地址的方法
- 【Linux】 - linux文本编辑器vim的常用操作
- App安装来源追踪技术在渠道推广中有哪些意义?
- java对接PayPal支付(v2)
- 时序逻辑电路二——数字逻辑实验
- 超级简单Vue实现手风琴布局
热门文章
- com.mysql.cj.jdbc.driver maven_com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver的区别
- iPhone屏幕尺寸、分辨率及适
- 铁道部售票网前端分析
- android多级树形列表,移动应用开发专业前景工资
- 五子棋的Java实现 详解
- Task '' not found in root project '***'.
- 使用AS自制简易微信界面
- 新书《团队管理策略(TES)》作者访谈
- pandas中数据的选取
- Scratch少儿编程案例-大鱼吃小鱼-鱼延迟跟随鼠标