gbdt.PNG
image
1,GBDT 说明
GBDT 是 Gradient Boosting Decison Tree 的简称, 其中 Gradient 是梯度, 是这个方法的核心; Boosting 是提升树, 是这个方法的框架; Decision Tree 是决策树, 是实现这个方法用到的模型.
GBDT 可以解决回归问题, 经过一些处理也可以解决分类 (二类, 多类) 问题, 但是用到的树都是回归树, 这一点需要牢记.
首先通过简单的回归例子说明一下提升树(Boosting):
如果样本 1 的输出真实值为 10, 树 T1 针对样本 1 的预测值为 18,
然后我们让树 T2 去拟合样本 1 的值为 10-18=-8(残差). 如果树 T2 的输出值为 - 10,
我们再让树 T3 去拟合 - 8-(-10)=2(残差), 结果树 T3 的预测值为 1.
如果到此迭代结束, 在最终对样本 1 的预测值为: 18+(-10)+1=9.
到这里, 提升回归树的流程就大致清楚了. 也就是通过多轮迭代, 每轮迭代产生一个弱模型, 每个模型都是在上一个模型的残差基础上进行训练的, 最后将所有树的结果求和得出最终的结果.
GBDT 就是在提升树的基础上, 利用了梯度提升的方法, 也就是用损失函数的负梯度在当前模型下的值来作为提升树中残差的近似值. 对于 GBDT 用于回归问题而言, 如果损失函数定义为 MSE, 则其负梯度就是残差. 因此残差是损失函数负梯度的一种特殊情况. 负梯度是残差这种思想的一般化. 残差只可以用于回归问题, 但是这种负梯度的思想也可用于分类问题.
2,GBDT 流程图
image
3,GBDT 回归
hh1.jpg
4,GBDT 分类
这里解释下, 为什么 GBDT 解决分类问题用的也是回归树. 因为 GBDT 的根本就是在不断地拟合残差, 残差的加减可以逐渐减小偏差. 而分类树输出的是类别, 他们之间的加减是没有意义的. 分类问题和回归问题的最大不同在于损失函数的定义以及节点输出值的确定, 其他都是一样的.
4.1 二分类
hh2.jpg
4.2 多分类
对于多分类任务, GDBT 采用的是 OneVsOther 方法, 也就是对每个类别训练 m 个弱模型. 假设有 K 个类别, 那么训练完之后总共有 K*m 颗树.
hh3.jpg
5,GBDT 实例
5.1 北京 PM2.5 回归
参数选择图
image
预测, 真实结果对比图
image
5.2 成年人收入分类
参数选择图
image
预测结果的混淆矩阵以及个指标
image
image
来源: http://www.jianshu.com/p/91b5c4d10bcb