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

后剪枝算法

后剪枝算法有很多种,这里简要总结如下:

Reduced-Error Pruning (REP,错误率降低剪枝)

这个思路很直接,完全的决策树不是过度拟合么,我再搞一个测试数据集来纠正它。对于完全决策树中的每一个非叶子节点的子树,我们尝试着把它替换成一个叶子节点,该叶子节点的类别我们用子树所覆盖训练样本中存在最多的那个类来代替,这样就产生了一个简化决策树,然后比较这两个决策树在测试数据集中的表现,如果简化决策树在测试数据集中的错误比较少,那么该子树就可以替换成叶子节点。该算法以bottom-up的方式遍历所有的子树,直至没有任何子树可以替换使得测试数据集的表现得以改进时,算法就可以终止。

Pessimistic Error Pruning (PEP,悲观剪枝)

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

CART分类回归树

基尼指数

分类问题,假设有K个类,样本点属于第k个类概率为pk,则概率分布的基尼指数定义为

对于二类分离,样本点属于第一个类的概率p,基尼指数

对于给定样本集合D,基尼指数

Ck是D中属于第k类的样本子集,K是类的个数。

如果样本集合D根据特征A是否取某一可能值a被分割为D1和D2两部分。

(即在某一特征多个取值中,取其一个将其分为”是”其他为”不是”)

在特征A下,集合D的基尼指数定义为

基尼指数越大,样本集合不确定性越大。

CART树生成

(1) 设结点的训练数据集为D,计算现有特征对该数据集的基尼指数.此时,对于每个特征,每次取其中一个每个可能取得值,根据样本点对该值的测试结果为”是”或”否”将D分成2部分,并计算基尼指数.

(2) 在所有可能的特征,以及他们所有可能的切分点中,选择基尼指数最小的特征,该选择的特征为最优特征,该特征中的切分点为最优切分点,依照最优特征和最优切分点生成二叉树,并把训练数据集分配到子节点中。

(3)对两个子节点递归调用 (1) (2) ,直至满足停止条件

(4)生成CART决策树。

停止条件是样本个数小于预定阈值,或样本基尼指数小于预定阈值,或没有更多特征。

而ID3,C4.5在(1) (2)处与CART不同,ID3计算信息增益,C4.5计算信息增益比,首先求所有特征的信息增益或信息增益比,其中计算的数值是针对每一个特征,不将特征划分,而后以该特征将树延伸,在父节点确定的条件下,继续对子节点求所有特征的信息增益,后在划分。

CART则为求所有特征下的所有切分点后进行比较来划分。

在CART剪枝中

CART剪枝分为剪枝成子树序列,并通过交叉验证选取最优子树。

1.剪枝,成子树序列

在剪枝过程中,计算子树的损失函数:

其中,T为任意子树,C(T)为对训练数据的预测误差(如基尼指数),|T|为子树的节点个数,a>=0为参数,Ca(T)为参数是a时子树T的整体损失,参数a权衡训练数据的拟合程度和模型的复杂度。

从上方a不是固定的时候,则整个损失函数由预测误差,a和模型复杂度共同决策,得出a大的时候,最优子树Ta偏小;当a小的时候,最优子树Ta的树较大,a=0时整体树最优,a->∞时,根结点组成的单节点树最优。

且认为不同的a值,可以确定一棵不同的最优化的树,或者说一个区间内的a值可以确定一颗最优化的树

即将a不断增大,利用a生成Ta这棵最优子树

为了得到所有的可能生成的最优化树{T0,T1,T2,…Tn},我们须从底向上,每次进行一次剪枝,通过得到的树认为是最优化树反推a

具体的,从整体树T0开始剪枝,对于T0的任意内部结点t,结点下有若干子节点,把t下的子树的若干叶节点称为Tt。

剪枝后(即t下的子树减去后,t变为叶节点)的损失函数

剪枝前的损失函数

注意这里的损失函数都是某个叶结点的损失函数,但为什么可以只求叶节点的损失函数,因为在上面的分析ID3,C4.5中得出了C(T)作为模型的预测误差的值,通过累加每一个叶结点(即T个叶结点)的预测误差而得出C(T)。因此单独求某个叶结点并没有什么问题。

现在就是求解a,a如何求解?

当a=0或充分小时,不等式

因为叶结点越多预测误差应该越小。

当a不断增大时,在某个a点有

当a再增大时,不等式反向。因此只要

Tt与t有相同的损失函数,而t结点少,因此t比Tt更可取,对Tt进行剪枝。

接下来对T0这棵整体树中的每一个结点t,计算

这个g(t)表示剪枝后的整体损失函数减少程度,实际上可以看为是否剪枝的阈值,对于某个结点当他的参数a=g(t)时,剪和不剪总体损失函数时一样的。如果a增大则不剪的整体损失函数就大于剪去的。即a大于g(t)该剪,剪后会使整体损失函数减小,而a小于g(t)则不剪,剪后会使整体损失函数增大。

这样a缓慢增大,随着a的增大,在一个区间内可确定一棵最优的剪枝树

而我们求每棵树,并认为他是最优剪枝树。

g(t)则代表每一棵树的a的最优区间内的最小值

即在T0中剪去g(t)最小的Tt,得到的子树为T1,同时将最小的g(t)设为a1,那

么T1为区间[a1,a2)的最优子树。

如此这样下去,将所有可能的树的情况剪枝直到根节点,在这个过程中则

会不断增加a,产生新的区间,最后a的所有可能的g(t)取值全部确定。

2.通过交叉验证选取最优子树

具体的利用独立的验证数据集,测试子树序列T0,T1,…Tn中各棵子树的平

方误差或基尼指数。平方误差或基尼指数最小的决策数被认为是最优决策

数,因为我们每确定一棵子树就会确定其参数a值,所以最优子树Tk确定,对应ak也确定,即得到最优决策数Ta。

在使用随机森林算法进行特征选择时,其中一种方法叫做OOB,即袋外误差:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值