决策树先剪枝和后剪枝

(一)剪枝算法的简介: 
剪枝一般是为了避免树的过于复杂,过于拟合而进行的一个动作,剪枝操作是一个全局的操作。

(二)预剪枝: 
预剪枝就是在树的构建过程(只用到训练集),设置一个阈值(样本个数小于预定阈值或GINI指数小于预定阈值),使得当在当前分裂节点中分裂前和分裂后的误差超过这个阈值则分列,否则不进行分裂操作。

(三)后剪枝: 
(1)后剪枝是在用训练集构建好一颗决策树后,利用测试集进行的操作。 
(2)算法: 
基于已有的树切分测试数据: 
1.如果存在任一子集是一棵树,则在该子集递归剪枝过程 
2.计算不合并的误差 
3.如果合并会降低误差的话,就将叶节点合并 
(3)在回归树一般用总方差计算误差(即用叶子节点的值减去所有叶子节点的均值)。 
后剪枝的算法包括: 
Reduced-Error Pruning (REP,错误率降低剪枝) 
这个思路很直接,完全的决策树不是过度拟合么,我再搞一个测试数据集来纠正它。对于完全决策树中的每一个非叶子节点的子树,我们尝试着把它替换成一个叶子节点,该叶子节点的类别我们用子树所覆盖训练样本中存在最多的那个类来代替,这样就产生了一个简化决策树,然后比较这两个决策树在测试数据集中的表现,如果简化决策树在测试数据集中的错误比较少,那么该子树就可以替换成叶子节点。该算法以bottom-up的方式遍历所有的子树,直至没有任何子树可以替换使得测试数据集的表现得以改进时,算法就可以终止。

Pessimistic Error Pruning (PEP,悲观剪枝) 
PEP剪枝算法是在C4.5决策树算法中提出的, 把一颗子树(具有多个叶子节点)用一个叶子节点来替代(我研究了很多文章貌似就是用子树的根来代替)的话,比起REP剪枝法,它不需要一个单独的测试数据集。

PEP算法首先确定这个叶子的经验错误率(empirical)为(E+0.5)/N,0.5为一个调整系数。对于一颗拥有L个叶子的子树,则子树的错误数和实例数都是就应该是叶子的错误数和实例数求和的结果,则子树的错误率为e,这个e后面会用到 
这里写图片描述

然后用一个叶子节点替代子树,该新叶子节点的类别为原来子树节点的最优叶子节点所决定(这句话是从一片论文看到的,但是论文没有讲什么是最优,通过参考其他文章,貌似都是把子树的根节点作为叶子,也很形象,就是剪掉所有根以下的部分),J为这个替代的叶子节点的错判个数,但是也要加上0.5,即KJ+0.5。最终是否应该替换的标准为: 
这里写图片描述

出现标准差,是因为我们的子树的错误个数是一个随机变量,经过验证可以近似看成是二项分布,就可以根据二项分布的标准差公式算出标准差,就可以确定是否应该剪掉这个树枝了。子树中有N的实例,就是进行N次试验,每次实验的错误的概率为e,符合B(N,e)的二项分布,根据公式,均值为Ne,方差为Ne(1-e),标准差为方差开平方。 
(二项分布的知识在文章最后) 
网上找到这个案例,来自西北工业大学的一份PPT,我个人觉得PPT最后的结论有误 
这里写图片描述

PEP案例 
这个案例目的是看看T4为根的整个这颗子树是不是可以被剪掉。 
树中每个节点有两个数字,左边的代表正确,右边代表错误。比如T4这个节点,说明覆盖了训练集的16条数据,其中9条分类正确,7条分类错误。 
我们先来计算替换标准不等式中,关于子树的部分: 
子树有3个叶子节点,分别为T7、T8、T9,因此L=3 
子树中一共有16条数据(根据刚才算法说明把三个叶子相加),所以N=16 
子树一共有7条错误判断,所以E=7 
那么根据e的公式e=(7+0.5×3)/ 16 = 8.5 /16 = 0.53 
根据二项分布的标准差公式,标准差为(16×0.53×(1-0.53))^0.5 = 2.00 
子树的错误数为“所有叶子实际错误数+0.5调整值” = 7 + 0.5×3 = 8.5 
把子树剪枝后,只剩下T4,T4的错误数为7+0.5=7.5 
这样, 8.5-2 < 7.5, 因此不满足剪枝标准,不能用T4替换整个子树。

Cost-Complexity Pruning(CCP,代价复杂度剪枝) 
CART决策树算法中用的就是CCP剪枝方法。也是不需要额外的测试数据集。

Minimum Error Pruning(MEP) 
Critical Value Pruning(CVP) 
Optimal Pruning(OPP) 
Cost-Sensitive Decision Tree Pruning(CSDTP)

(四)前剪枝和后剪枝的比较: 
(1)前阈值的设定很敏感,一点点的变动,会引起整颗树非常大的变动,不好设定。 
(2)前剪枝生成比后剪枝简洁的树 
(3)一般用后剪得到的结果比较好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值