在一棵树生长完成后,往往需要剪枝,这是因为一颗完整的决策树往往容易过拟合。
CCP即为基于复杂度的剪枝(cost complexity pruning).
一 概念
在介绍CCP剪枝的原理之前,我们先来介绍一下什么是剪枝以及剪枝所用的评价指标。
1.什么是剪枝?如图,显示了对节点进行剪枝的过程。
2.如何计算整棵决策树的误判率?
整棵树的误判率被定义为各个叶子节点误判率的加权平均,权重是该叶子节点的样本数的占比。
其中,代表叶子节点,是节点处的样本比例,是节点处的误判率。。
二 CCP原理
CCP的基本形式是找到一个子树使得下式最小:
是一个复杂度参数,当较小时,倾向于选择一个较大的树,增大的值,会减小树的大小。代表所有叶子节点的个数。
在正式介绍CCP之前,大家可以先想一下以下两个问题并带着这两个问题进行接下来的阅读。
- 子树的选择是唯一的吗?换句话说,如果有两种剪枝方式,使得最后的评估指标是一样大时,该选择哪种剪枝方式呢?
- 在剪枝的过程中,如获得的子树分别是,那么这个更小的子树是否会包含在中?
先来回答问题1,我们可以对最终选取的子树做如下定义:
按照这样的定义选出的子树是存在且唯一的。这个定义的意思就是如果有两个子树得到的误判率是相同的,则选取较小的子树作为最终的决策树。
问题2的答案就在下面的内容中,为了使得后产生的子树包含在之前的子树内,我们采取序贯剪枝的策略。
2.1 子树的产生
在对CCP有了大概的认识之后,需要找到一系列子树。为什么要产生这些子树呢?
为了回答这个问题,再回到上面那张剪枝图中,虚线下方的所有节点称为。
下面列出剪枝前后的决策树误判率的相对值,为什么称作相对值呢?因为除了被裁剪的部分,其他节点的误判率和节点个数并不会发生改变,因此我们在这里只关注剪枝的部分。
- 剪枝前:
- 剪枝后:
当,即剪枝后误差增大时不会进行剪枝操作,解出,且不等号右边的值大于零。
原则上是可以取任意连续值,但是可以想象,随着的缓慢增大,并不一定需要剪枝,只有当增大到某个值时,我们发现剪枝减小的叶子节点个数已经可以弥补误判率的增高时,才会去剪枝。也就是在真实情况下,其实是一个离散的序列,下面介绍的弱连接可以帮助我们找到这些需要进行剪枝操作的序列。
2.2 Weakest-link弱连接
就是弱连接的定义,就是在树中找到一个节点使得最小,也就是达到了剪枝的临界点,可以将节点以下的节点剪除,继而在这个新的树中再重新寻找弱连接,这样下一次剪枝是在上一次剪枝的基础之上即为序贯剪枝。对完整的决策树,根据弱连接找序列,下面是具体过程,
- 1.在所有的非根节点的节点中,寻找weak-link ,得到,得到子树{}。
- 2.对1中得到的子树重复操作1这一过程。
从而得到一系列的子树{},以及序列{}。的不同取值对应着不同的子树,当时,最小化的子树是。
三 的选取
主流做法就是交叉验证。下面给出找出最优的伪代码。
for do
for in do
分为和,= -
用产生
根据CCP产生一系列的子树,找到对应的子树
计算在
网友评论