决策树后剪枝算法(三) 悲观错误剪枝PEP


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

  剪枝,是一个“用准确性换取简单性”的思想。它允许决策树对训练集过拟合,再通过删除对泛化精度无贡献的子分支,从而修剪出一颗较小的树。以下列出几种较常见的后剪枝算法,及其机制对比:

CCPREPPEPMEP
剪枝方式自底向上自底向上自顶向下自底向上
计算复杂度 O ( n 2 ) O(n^2) O(n2) O ( n ) O(n) O(n) O ( n ) O(n) O(n) O ( n ) O(n) O(n)
误差估计标准误差剪枝集上误差连续性矫正概率估计
是否需要额外剪枝集

(3)悲观错误剪枝

  悲观错误剪枝(PEP)是Quinlan为了克服REP方法需要独立剪枝数据集的缺点而提出的,它不需要分离的剪枝数据集。该方法引入了统计学上“连续修正”的概念来弥补REP中的缺陷, 在评价子树的训练错误公式中添加了一个常数,以提高未来样本数据的预测可靠性。特别说明,PEP为自顶向下的剪枝方法。

(3.1)数学推导

REP错误率回顾:
单节点分类错误率 : r ( t ) = e ( t ) n ( t ) 子树节点分类错误率 : r ( T t ) = ∑ s ∈ T 2 e ( s ) ∑ s ∈ T 2 n ( s ) 单节点分类错误率:r(t)=\frac{e(t)}{n(t)}\\ 子树节点分类错误率:r(T_t)=\frac{\sum_{s\in T_2}e(s)}{\sum_{s\in T_2}n(s)} 单节点分类错误率:r(t)=n(t)e(t)子树节点分类错误率:r(Tt)=sT2n(s)sT2e(s)
PEP改进:


单节点错误率 : r ( t ) = e ( t ) + 0.5 n ( t ) 子树节点错误率 : r ( T t ) = ∑ i = 1 L e ( i ) + 0.5 L ∑ i = 1 L n ( i ) 单节点错误率:r(t)=\frac{e(t)+0.5}{n(t)}\\ 子树节点错误率:r(T_t)=\frac{\sum_{i=1}^{L}e(i)+0.5L}{\sum_{i=1}^{L}n(i)} 单节点错误率:r(t)=n(t)e(t)+0.5子树节点错误率:r(Tt)=i=1Ln(i)i=1Le(i)+0.5L
解读:

  • 0.5 为惩罚因子,为二项概率分布近似的 连续修正因子
  • L L L 为叶子节点个数, 即 ∣ f ( T t ) ∣ |f(T_t)| f(Tt),单节点 ∣ f ( t ) ∣ = 1 |f(t)|=1 f(t)=1
img

  进一步推导,由于误差可视为二项分布,即有均值 μ = n p \mu=np μ=np,方差 σ 2 = n p q \sigma^2=npq σ2=npq(正确为 p p p,错误为 q q q),有:
标准差 : S E ( e ( T t ) ) = ( ∑ i = 1 L e ( i ) + 0.5 L ) ( n ( t ) − ∑ i = 1 L e ( i ) − 0.5 L ) n ( t ) 标准差:SE(e(T_t))=\sqrt{\frac{(\sum_{i=1}^{L}{e(i)+0.5L})(n(t)-\sum_{i=1}^{L}e(i)-0.5L)}{n(t)}} 标准差:SE(e(Tt))=n(t)(i=1Le(i)+0.5L)(n(t)i=1Le(i)0.5L)
  即我们引出剪枝判断标准:
∑ i = 1 L e ( i ) + 0.5 L + S E ( e ( T t ) ) ≥ e ( t ) + 0.5 \sum_{i=1}^{L}e(i)+0.5L+SE(e(T_t))\geq{e(t)+0.5} i=1Le(i)+0.5L+SE(e(Tt))e(t)+0.5
  即-剪枝后的错误数 ≤ \leq 剪枝前的错误数(标准差在这里充当置信区间,当然也可以选定其他标准)

  确认了剪枝判断条件,接下来自顶向下递归遍历每个非叶子节点即可,当然节点类别标签还是多数表决决定。

(3.2)算法流程

  考虑决策树上每个分支节点作为剪枝候选对象,自顶向下遍历,判断是否剪枝步骤如下:

  • (1)删除以此节点为根的子树,使其成为叶子结点。
  • (2)根据多数表决法,赋予该节点关联的训练数据类别。
  • (3)比较删除前后剪枝判断条件,判断是否剪枝该节点。

(3.3)例题计算

  下面举一个例子进行说明,下图待剪枝决策树有三个类别,每个节点类别及各分类样本数均如图矩形框中列出。

在这里插入图片描述

  节点"node 27"
e ( T 27 ) = ∑ i = 1 L e ( i ) + 0.5 L = 2 + 0 + 0.5 × 2 = 3 S E ( e ( T 27 ) ) = ( ∑ i = 1 L e ( i ) + 0.5 L ) ( n ( t ) − ∑ i = 1 L e ( i ) − 0.5 L ) n ( t ) = ( 2 + 0.5 × 2 ) ( 20 − 2 − 0.5 × 2 ) 20 = 1.59687 故有 ∑ i = 1 L e ( i ) + 0.5 L + S E ( e ( T t ) ) < e ( t 27 ) + 0.5 = 5 + 0.5 e(T_{27})=\sum_{i=1}^{L}e(i)+0.5L=2 +0+0.5\times2=3\\ SE(e(T_{27}))=\sqrt{\frac{(\sum_{i=1}^{L}{e(i)+0.5L})(n(t)-\sum_{i=1}^{L}e(i)-0.5L)}{n(t)}}=\sqrt{\frac{(2+0.5\times2)(20-2-0.5\times2)}{20}}=1.59687\\ 故有\sum_{i=1}^{L}e(i)+0.5L+SE(e(T_t))<{e(t_{27})+0.5}=5+0.5 e(T27)=i=1Le(i)+0.5L=2+0+0.5×2=3SE(e(T27))=n(t)(i=1Le(i)+0.5L)(n(t)i=1Le(i)0.5L) =20(2+0.5×2)(2020.5×2) =1.59687故有i=1Le(i)+0.5L+SE(e(Tt))<e(t27)+0.5=5+0.5
  因此,"node 27"判断为不可以剪枝。

  节点"node 26"

  对于"node 26"也是不能剪枝的,在此请自行计算验证。

(3.4)代码实现

 C4.5算法及PEP剪枝手写实现

链接:https://pan.baidu.com/s/1HsZeZy34WhC0rImRNPlFqQ?pwd=y56n 
提取码:y56n

 代码参考:http://www.hzcourse.com/web/refbook/detail/9970/226

————————————————————————————————————————————————————————————

参考资料:

[1] 现代决策树模型及其编程实践 黄智濒 编著

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
决策树是一种常用的机器学习算法,用于分类和回归任务。预剪枝和后剪枝决策树中用于防止过拟合的技术。 1. 决策树剪枝决策树剪枝是在构建决策树的过程中,在每个节点进行划分之前,通过一些条件来判断是否进行划分。常见的预剪枝条件有以下几种: - 最大深度限制:限制决策树的最大深度,防止过拟合。 - 叶子节点样本数限制:限制叶子节点的最小样本数,防止过拟合。 - 信息增益阈值:限制信息增益的最小值,当信息增益小于阈值时停止划分。 以下是一个决策树剪枝的示例代码: ```python from sklearn.tree import DecisionTreeClassifier # 创建决策树分类器对象 clf = DecisionTreeClassifier(max_depth=5, min_samples_leaf=10, min_impurity_decrease=0.01) # 使用训练数据拟合分类器模型 clf.fit(X_train, y_train) # 使用测试数据进行预测 y_pred = clf.predict(X_test) ``` 2. 决策树剪枝决策树剪枝是在构建完整的决策树之后,通过剪枝操作来减小决策树的复杂度,防止过拟合。常见的后剪枝方法有以下几种: - 代价复杂度剪枝:通过引入一个参数来平衡模型的复杂度和准确性,选择代价最小的子树作为最终的决策树。 - 错误剪枝:通过计算剪枝前后的错误率,选择错误率最小的子树作为最终的决策树。 以下是一个决策树剪枝的示例代码: ```python from sklearn.tree import DecisionTreeClassifier from sklearn.tree import export_text # 创建决策树分类器对象 clf = DecisionTreeClassifier() # 使用训练数据拟合分类器模型 clf.fit(X_train, y_train) # 导出决策树的文本表示 tree_rules = export_text(clf, feature_names=feature_names) # 打印决策树的文本表示 print(tree_rules) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值