CART剪枝详解
来源:互联网 发布:java c3p0连接池 编辑:程序博客网 时间:2024/06/17 05:28
CART之剪枝详解
我们这里用的是代价复杂度剪枝算法。
首先我们将一颗充分生长的树称为
T为任意子树,C(T)为预测误差,可以是平方误差也可以是基尼指数,|T|为子树T的叶子节点个数,注意是叶子节点,
那么我们如何找到这个合适的
尽管
高能预警:(这里不注意的话,后面会有很大的疑惑)
Breiman证明:将
这也是代价复杂度剪枝的核心思想。
基于上面的论述,剪枝可分为两部分,第一部分生成子树序列,第二部分交叉验证。
1. 生成子树序列
我们每次剪枝剪的都是某个内部节点的子节点,也就是将某个内部节点的所有子节点回退到这个内部节点里,并将这个内部节点作为叶子节点。因此在计算整体的损失函数时,这个内部节点以外的值都没变,只有这个内部节点的局部损失函数改变了,因此我们本需要计算全局的损失函数,但现在只需要计算内部节点剪枝前和剪枝后的损失函数。
对任意内部节点t,
剪枝前的状态:有
剪枝后的状态:只有本身一个叶子节点,预测误差是
因此剪枝前的以t节点为根节点的子树的损失函数是
剪枝后的损失函数是
易得,一定存在一个
这个
然后我们对
(注意这里的t是变量,上面推
书上说g(t)表示剪枝后整体损失函数减少的程度,然后剪去g(t)最小的
当初这是非常困扰我的一个地方,1.为什么代表整体损失函数减少的程度。2.既然代表减少的程度,为什么剪去g(t)最小的
- 1.首先针对第一个问题
我承认我到现在也没弄懂,我觉得写的有问题或者有歧义?我觉得把它解释成误差减小率
更合适,我觉得它是衡量叶子节点增加的值不值的一个标准。首先分子是误差减小的量,如果我们单一的看误差见效的量有可能会有失偏颇,因为你可能是增加了很多很多的叶子节点才换来的这么一点误差的减小量,因此我们除以增加的叶子节点数,来代表每个叶子节点带来的误差减小量。
- 2.为什么剪去g(t)最小的
Tt
如刚才说的g(t)代表每个叶子节点带来的误差减小量,如果g(t)越小,也就是增加叶子带来的误差减小量越小,也就是增加这个叶子节点的作用越小,花那么大的功夫增加叶子节点,误差才减小那么一点点,还不如不要,因此优先剪去g(t)最小的t
- 3.为什么不剪去
(C(t)+α) 最小的Tt .
考虑过这个问题的说明有一定思考了。对当前的
但是上面那句话真的对嘛?
整体损失函数 = 内部节点t的损失函数 + 其他节点的损失函数和
如果我们剪去的损失函数最小的那个内部节点,那么等号右边第一项是最小了,那第二项呢?所以提出的疑问也就不成立了。
进一步,为什么会让人产生这样的疑问呢?我觉得主要是没弄明白节点t是常量
还是变量
。
在计算因此在计算整体的损失函数时,这个内部节点以外的值都没变,只有这个内部节点的局部损失函数改变了,因此我们本需要计算全局的损失函数,但现在只需要计算内部节点剪枝前和剪枝后的损失函数。
这个只跟能否使整体损失函数减小有关,与整体损失函数能否达到最小无关。
2. 交叉验证
用交叉验证法在子树序列中选取最优子树。
- CART剪枝详解
- CART剪枝
- CART 剪枝算法
- CART决策树剪枝
- CART构建与剪枝
- CART树的剪枝
- 机器学习-决策树/CART剪枝
- 数据挖掘之CART剪枝
- CART算法实现之剪枝篇
- cart剪枝,罚项系数a讨论
- 决策树之剪枝原理与CART算法
- 机器学习CART及CCP剪枝原理
- 决策树的剪枝和CART算法
- CART树回归、剪枝、Tkinter GUI
- 决策树-Cart生成和剪枝算法
- CART树剪枝的操作的理解
- CART回归树&模型树 生成 剪枝 in Python
- CART 分类回归树、模型树, 及REP后剪枝
- Re0(学长在2017新年出的题)
- 深度优先搜索(DFS)
- splay小记
- jQuery_extend()参数
- 【Redis】redis实战:在业务中添加缓存机制
- CART剪枝详解
- 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.
- 我的自定义控件之旅——自定义进度条
- MySQL入门1——数据类型和简单数据表操作
- xutils网络请求
- spring对rabbitmq RPC的支持
- 泛型-擦出的神秘之处
- Spring MVC中AOP无效、不起作用
- C语言排序之二分法插入排序篇