回归树,Gradient Boosting和GBDT

来源:互联网 发布:世界史书推荐知乎 编辑:程序博客网 时间:2024/04/25 18:10

一开始听到GBDT的时候,表示完全没听过,所以查了查相关资料研究一下,发现李航的《统计学习方法》里面就有讲,只不过没有叫GBDT这个名字就是了。

GBDT主要知识点分为两个,一个是回归树(DT,Regression Decision Tree),Gradient Boosting(GB)

Regression Decision Tree回归树

对于回归树和决策树来说,一般都是放到一块去说的,统一叫做CART方法(Classification And Regression Tree)。
但是之前只是对决策树比较熟,对回归树平时用的太少了, 之前对回归树感觉只是知道概念,但是不知道具体的一些细节。看了一些文章觉得也没写的太明吧,于是干脆去看源码。很多细节顿时一目了然。参考资料如下:
《机器学习实战》笔记之九——树回归
《机器学习实战》第九章回归树错误
下面列出了几个细节:

  1. 叶子结点里面储存的是一个线性回归的方程参数。所以回归树本质上相当于一个分段的线性函数,如何分段呢,就是通过决策树去分段。这种方法其实已经不叫回归树了,叫模型树【或者叫树回归】。回归树特制的情况下,是指叶子结点的值是一个点【这个点是叶子节点中所有点的均值】。模型树的可解释性是它优于回归树的特点之一。模型树也具有更高的预测准确度。利用树生成算法对数据进行切分,且每份切分数据都能很容易被线性模型所表示。
  2. 在递归建树的过程中,选择最优切分特征和最优切分点位,是依次遍历所有特征,然后再遍历所有的点在这个特征上的取值,找到一个最优的切分点。

以上这两个是我之前不是很理解的小细节,看了源码之后感觉好了很多。

Gradient Boosting梯度增强

Boosting方法

Gradient Boosting其实是属于boosting方法中的一种,一般大家熟悉的方法就是Adaboost方法,不过boost方法不止Adaboost,用李航在《统计学习方法》中的定义:在分类问题中, 它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能

  1. 对于Adaboost,它就是学习多个分类器,在学习的过程中对于前面分错的样本,加大权重,分对的减少权重,直到训练完成。
  2. 接下来讲一个提升树(Boosting Tree)算法,这个也是一个Boost方法,相较于Adaboost方法每次对最终的损失函数做优化,提升树方法采用的是每次优化上一步的残差,「每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。」【1】最终的提升树是所有树训练相加的和。
  3. 然后到了Gradient Boosting方法,对于提升树方法,当损失函数是平方损失函数或者指数损失函数的时候,这一步优化比较简单,但是对于一般的损失函数优化的不是那么容易。针对这一问题,Freidman就采用了Gradient Boosting这一方法,利用损失函数的负梯度来去近似残差。像平方损失函数来说,其负梯度就是残差了。

Gradient Boosting的优点

「Boosting的最大好处在于,每一步的残差计算其实变相地增大了分错instance的权重,而已经分对的instance则都趋向于0。这样后面的树就能越来越专注那些前面被分错的instance。」【1】
而且GBDT方法不容易过拟合,是被认为是统计学习中最有效的方法之一。一个常见的GBDT实现就是用Shrinkage方法。

参考文献

  1. GBDT(MART) 迭代决策树入门教程 | 简介
  2. 李航《统计学习方法》第八章
  3. 《机器学习实战》笔记之九——树回归
  4. 《机器学习实战》第九章回归树错误
1 0