决策树剪枝算法

  剪枝作为决策树后期处理的重要步骤,是必不可少的。没有剪枝,就是一个完全生长的决策树,是过拟合的,需要去掉一些不必要的节点以使得决策树模型更具有泛化能力。

决策树

  决策树就是对一棵形似于树的判决模型,树的节点是某个属性,及分裂点,树的叶是类型。
  在生长过程中,可以有很多种不同的生成准则,具体就不在详述了。不清楚的同学参考之前的博客:http://blog.csdn.net/yujianmin1990/article/details/47406037
  今天主要讲的是决策树的剪枝策略。

决策树剪枝

  为什么剪枝?
  我们生成的好好的决策树,为什么要对其进行剪枝呢?因为我们在生成树的过程中,如果没有剪枝的操作的话,就会长成每一个叶都是单独的一类的样子。这样对我们的训练集是完全拟合的,但是对测试集则是非常不友好的,泛化能力不行。因此,我们要减掉一些枝叶,使得模型泛化能力更强。
  根据剪枝所出现的时间点不同,分为预剪枝和后剪枝。预剪枝是在决策树的生成过程中进行的;后剪枝是在决策树生成之后进行的。

剪枝策略

  剪枝之后,对该节点的类别判别是用“大多数原则“,选择当前数据集下的最多的类标签为该节点的类别。
  1)Reduced Error Pruning:误差降低剪枝
  最简单粗暴的一种后剪枝方法,其目的减少误差样本数量。
   f(T)=tTe(t)
  其中 e(t) 表示在节点 t 下的样本的误判个数;T表示当前树的节点。
   f(T)=tTe(t)
  其中 T 表示去掉某个节点 N 之后的树的节点;e(t)表示某个节点下的训练样本点误判数量。
  剪枝的条件: f(T)f(T) ,即 e(tK)e(tK)
  剪枝之后使得误差降低。
  1)Pessimistic Error Pruning:悲观错误剪枝
  该方法基于训练数据的误差评估,因此不用单独找剪枝数据集。但训练数据也带来错分误差偏向于训练集,因此需要加入修正1/2。是自上而下的修剪。
  具有 T 个节点的树的误差率衡量为:
  E(T)=tTe(t)+1/2N(t)
  去掉节点 K 之后T个节点的树的误差衡量为(此衡量方法侧重对每个节点的衡量),有的在前面加负号的,基本推导是一致的,剪枝条件的结论是一样的。
   E(T)=tT,excepKe(t)+1/2N(t)
   e(t) 表示节点 t 之下的训练集的误判的个数。
  N(t)表示节点 t 之下的训练集的总个数。
  设n(t)=e(t)+1/2N(t)
  可以证明
   E(T)E(T)=n(tK)n(tK)=e(tK)e(tK)N(t)
  即:带着某个点的该支的误判个数-去掉某点之后该支的误判个数 再除以该支的总个数。
  剪枝的条件是:
   SE(n(tK))=n(tK)(N(t)n(tK))N(t)E(T)E(T)=e(tK)e(tK)N(t)
————————————————————
   PEPAlgorithm
   Input:   Tree
   Output:   PruningTree
   Process:
   For all the Node
    
     if SE(n(tK))e(tK)e(tK)N(t)
    
   end For
————————————————————
  2)Minimum Error Pruning:最小误差剪枝[1]
  该方法由Niblett&Bratko1987年发明。与悲观错误剪枝方法相近,但是对类的计数处理是不同的。自底向上剪枝。
  初始版本是:
   Epruning=nnc+k1n+k
   Epruning 表示在某节点剪枝之后的一个期望误差率, n 表示该节点的样本数量,nc表示其中类别最多的样本个数, k 表示数据的标签类别个数。此处有个假设:所有样本是均等的。
  Enotpruning=Msplit=1|Ssplit||S|Esplitpruning
  其中 |Ssplit||S| 表示分裂为某一支的样本比例
  剪枝的条件: EpruningEnotpruning 则剪掉该节点。
  改进版本是: [1][2]
  一个观测样本到达节点 t ,其隶属于类别i的概率为:
   pi(t)=ni(t)+paimN(t)+m
  其中, ni(t) 表示该节点下的训练样本中,被判断为 i 类的样本数量。pai表示在该类别的先验概率。 N(t) 表示该节点下训练样本的数量。 m 是评估方法的一个参数(m可以依据数据噪声给出,但是也可以作为一个参数,调节一下找到一个较合适的)。
  对m-probability-estimates, the static error : Es在某一个节点的计算方式如下:
   Es=1nc+pαcmN+m=Nnc+(1pαc)mN+m
  其中, N 是节点所在支的样本数量;nc是该节点下类别最多的样本数量。 pαc 表示最多类别的先验概率。
  若是不剪枝,则期望误差: Esplits=Msplit=1|Ssplit||S|Esplits
  剪枝的条件: EsEsplits 则去掉该节点。
  3)Cost-Complexity Pruning:代价复杂剪枝[3][4][5]
  该方法在Breiman1984年的经典CART中首次提到并使用。
  一棵树的好坏用如下式子衡量: Rα(T)=R(T)+αC(T)
  其中 R(T) 表示该树误差(代价)的衡量; C(T) 表示对树的大小的衡量(可以用树的终端节点个数代表)。 α 表示两者的平衡系数,其值越大,树越小,反之树越大。
  怎么用这个准则剪枝呢?
  1.找到完整树的一些子树{ Ti,i=1,2,3,...,m }。
  2.分别计算他们的 Rα(Ti) 选择最小的 Rα(Ti) 所代表的树。
  误差(代价)用训练样本,但最好十折计算。
  4)Error-Based Pruning:基于错误的剪枝[6]
  该方法由Quinlan在1992年的C4.5算法中首次提出并使用。使用测试集来剪枝。
  对每个节点,计算剪枝前和剪枝后的误判个数,若是剪枝有利于减少误判(包括相等的情况),则减掉该节点所在分支。
  5)Critical Value Pruning:
  该方法由Mingers1987年发明。
  树的生成过程中,会得到选择属性及分裂值的评估值,设定一个阈值,所有小于此阈值的节点都剪掉。

文献参考

[1]【Bojan & Bratko. On Estimating Probabilities in Tree Pruning】
[2]【The Effects of Pruning Methods on the Predictive Accuracy of Induced Decision Trees】
[3]【Cost Complexity-Based Pruning of Ensemble Classifiers】
[4]【Stopping Rules, Pruning, Tree Sequences, and Tree Selection】
[5]【Simplifying Decision Trees】
[6]【An Empirical Comparison of Pruning Methods for DecisionTree 】

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于建民

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值