决策树后剪枝——悲观剪枝(PEP)

悲观剪枝(PEP)

把一颗子树(具有多个叶子节点)的分类用一个叶子节点来替代的话,误判率肯定是上升的(这是很显然的,同样的样本子集,如果用子树分类可以分成多个类,而用单颗叶子节点来分的话只能分成一个类,多个类肯定要准确一些)。于是我们需要把子树的误判计算加上一个经验性的惩罚因子。

对于一颗叶子节点,它覆盖了N个样本,其中有E个错误,那么该叶子节点的错误率为(E+0.5)/N。这个0.5就是惩罚因子,那么一颗子树,它有L个叶子节点,那么该子树的误判率估计为:
子树误判率
这样的话,我们可以看到一颗子树虽然具有多个子节点,但由于加上了惩罚因子,所以子树的误判率计算未必占到便宜。剪枝后内部节点变成了叶子节点,其误判个数J也需要加上一个惩罚因子,变成J+0.5。那么子树是否可以被剪枝就取决于剪枝后的错误J+0.5在的标准误差内。对于样本的误差率e,我们可以根据经验把它估计成各种各样的分布模型,比如是二项式分布,比如是正态分布。

那么一棵树错误分类一个样本值为1,正确分类一个样本值为0,该树错误分类的概率(误判率)为e(e为分布的固有属性,可以通过统计出来),那么树的误判次数就是伯努利分布,我们可以估计出该树的误判次数均值和标准差:

均值:
均值
标准差:
标准差
把子树替换成叶子节点后,该叶子的误判次数也是一个伯努利分布,其概率误判率e为(E+0.5)/N,因此叶子节点的误判次数均值为:
叶子节点误判次数均值
使用训练数据,子树总是比替换为一个叶节点后产生的误差小,但是使用校正后有误差计算方法却并非如此,当子树的误判个数大过对应叶节点的误判个数一个标准差之后,就决定剪枝:
在这里插入图片描述
这个条件就是剪枝的标准。当然并不一定非要大一个标准差,可以给定任意的置信区间,我们设定一定的显著性因子,就可以估算出误判次数的上下界。

简单来说就是:
1)计算
剪枝前错误率e = (剪枝前的样本错误总数+节点数 x 0.5)/剪枝前样本总数

2)计算
剪枝前误判次数均值E = 样本总数 x e
剪枝前误判次数标准差 var = 根号下样本总数 x e x (1-e)

3)计算
剪之后的错误率e(后)
剪枝后误判次数均值E = 样本总数 x e(后)

4)判断剪枝条件:
剪枝前误判次数均值E - 剪枝前误判次数标准差 var > 剪枝后误判次数均值E
成立则剪枝

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
决策树是一种常用的机器学习算法,用于分类和回归任务。预剪枝和后剪枝决策树中用于防止过拟合的技术。 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) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值