版权声明:本文为博主原创文章,转载请著名出处 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&lt;ETi+δE_t &lt; 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)相关推荐

  1. 决策树剪枝算法:REP/PEP/CCP算法

    一颗完全生长的决策树会面临一个严重的问题--过拟合,因此我们需要剪掉一些枝叶来提高决策树的泛化能力.即使不存在过拟合,如果样本数量和分类数量是一个海量的级别,也需要预剪枝,因为计算资源不足以支撑生成完 ...

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

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

  3. 决策树后剪枝算法(一)代价复杂度剪枝CPP

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

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

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

  5. 二叉树剪枝_决策树,生成剪枝,CART算法

    决策树 1. 原理 1.1 模型简介 决策树是一种基本的回归和分类算法.在分类问题中,可以认为是一系列 if-then 规则的几何.决策树学通常包括三个步骤:特征选择,决策树的生成, 决策树的修剪. ...

  6. sklearn决策树预剪枝

    <老饼讲解机器学习>http://ml.bbbdata.com/teach#102 目录 一.预剪枝即调参 二.调参方法 (1) 默认值预观察生长的树 (2) 参数限制节点过分生长 为预防 ...

  7. 决策树——预剪枝和后剪枝

    一. 为什么要剪枝 1.未剪枝存在的问题 决策树生成算法递归地产生决策树,直到不能继续下去为止.这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即容易出现过拟合现象.解 ...

  8. python决策树剪枝_决策树及其剪枝原理

    后剪枝算法 后剪枝算法有很多种,这里简要总结如下: Reduced-Error Pruning (REP,错误率降低剪枝) 这个思路很直接,完全的决策树不是过度拟合么,我再搞一个测试数据集来纠正它.对 ...

  9. 机器学习基础(五十一)—— 决策树的剪枝

    使用一般的寻量方法得到的决策树会遇到一个问题,那就是决策树可能会变得过拟合(overfitted)--也就是说,它可能会变得过分针对训练数据.专门针对训练集所创建出来的分支,其熵值与真实情况相比,可能 ...

最新文章

  1. 日记-致我那易逝的时光
  2. iPhone 12将首次加入屏下指纹?都是为它铺路?
  3. 【iOS】使用storyboard界面跳转报错:unrecognized selector sent to instance 0x7
  4. java 自动补齐数值至指定位数
  5. java工厂模式和抽象工厂_Java中的抽象工厂设计模式
  6. 3732 Ahui Writes Word
  7. 材料力学考研可以用计算机吗,2020海南大学材料力学专业超详细考研经验分享...
  8. 杨玲 徐思 《面向对象程序设计(java)》第十一周学习总结
  9. java hibernate 详解_hibernate详解一
  10. CST设计接收贴片天线
  11. Appium自动化测试基础 — uiautomatorviewer定位工具
  12. C++中string.find()函数与string::npos
  13. 杰理之音频测试说明【篇】
  14. mysql如何用sql添加字段如何设置字符集和排序规则
  15. vc获取计算机用户名,vc获取计算机名和ip地址的方法
  16. 【Linux】 - linux文本编辑器vim的常用操作
  17. App安装来源追踪技术在渠道推广中有哪些意义?
  18. java对接PayPal支付(v2)
  19. 时序逻辑电路二——数字逻辑实验
  20. 超级简单Vue实现手风琴布局

热门文章

  1. com.mysql.cj.jdbc.driver maven_com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver的区别
  2. iPhone屏幕尺寸、分辨率及适
  3. 铁道部售票网前端分析
  4. android多级树形列表,移动应用开发专业前景工资
  5. 五子棋的Java实现 详解
  6. Task '' not found in root project '***'.
  7. 使用AS自制简易微信界面
  8. 新书《团队管理策略(TES)》作者访谈
  9. pandas中数据的选取
  10. Scratch少儿编程案例-大鱼吃小鱼-鱼延迟跟随鼠标