一文读懂:GBDT梯度提升

站长亦新
站长亦新
站长亦新
81
文章
0
评论
2020年6月21日20:08:05 评论 313 2009字阅读6分41秒

先缕一缕几个关系:
- GBDT是gradient-boost decision tree
- GBDT的核心就是gradient boost,我们搞清楚什么是gradient boost就可以了
- GBDT是boost中的一种方法,boost还有XGBoost,adaboost。
- GBDT的基模型一般是CART

1 基本概念

【Boost】就是让多个弱分类器,通过不同的集成方式,来让多个弱分类器变成一个强分类器。

【gradient-boost】 梯度提升。简单的说,先训练一个弱分类器,然后弱分类器和目标值之间的残差,作为下一个弱分类器训练的目标值。这里有一个非常简单的例子
在这里插入图片描述
- 第一个模型预测年龄,虽然真实值是30岁,第一个模型只给出了20岁的估计值;
- 第二棵树要预测的就是这个10岁的残差,但是第二棵树只给出了6岁的估计值;
- 第三棵树预测的是第二棵树的4岁的残差,但是………………(禁止套娃)

2 梯度 or 残差 ?

对于GBDT,网上的很多文章都没有讲清楚,学习梯度还是学习残差?从上面的那个例子来看,是学习残差的。

其实,从来GBDT都是学习梯度的,学习残差只是学习梯度的一个特例!

如果我们是在做一个回归任务(就像是上面例子中预测年龄),采用平方损失:loss = \frac{1}{2}\sum^n_i{(y_i-\hat{y_i})^2}
其中y_i是真实数值,\hat{y_i}是模型预测的值。

然后想求取这个关于\hat{y_i}的梯度,那就是:
\frac{\partial loss}{\partial \hat{y^i}}=(-1)(y_i-\hat{y_i})

所以残差在平方损失的情况下,就是等于负梯度,所以两者一回事。

3 残差过于敏感

对于数据不干净,没有清晰掉异常值的数据样本。使用平方损失对异常值过于敏感了
一文读懂:GBDT梯度提升

敏感就是因为,异常值的损失过大了,导致下一个弱分类器就会强行拟合这个5.445的样本,拟合异常值就意味着弱化了泛化能力,从而整体精度就可能会下降。

所以,这里在回归问题中,也可以考虑使用下面的两个损失函数:
- Absolute loss:
loss=|y-\hat{y}|

  • Huber loss:
    这个是设置一个阈值,当|y-\hat{y}|小于这个阈值的时候,采用平方损失,当|y-\hat{y}|大于这个阈值的时候,采用类似于绝对损失的线性损失:
    一文读懂:GBDT梯度提升
    这里看一下huber loss的函数图像:
    一文读懂:GBDT梯度提升
    就是一个平方损失,一个线性损失。

然后看一下平方损失,绝对损失,huber损失对于异常值的容忍程度:
一文读懂:GBDT梯度提升


【小小的总结】
GBDT是基于boosting的思想,串行地构造多棵决策树来进行数据的预测,它是在损失函数所在的函数空间中做梯度下降,即把待求的决策树模型当作参数,每轮迭代都去拟合损失函数在当前模型下的负梯度,从而使得参数朝着最小化损失函数的方向更新。

【现在还用吗?】
学肯定是要学的,因为GBDT是非常经典的集成模型,知道了可以扩充知识面。但是其实在2010年横霸大数据竞赛的,现在10年过去了,在竞赛中已经是老古董了。

【GBDT vs Adaboost】
Adaboost是boost集成的另一个非常经典的算法。Adaboost只能采用指数损失的二分类任务,而GBDT可以使用各种可微分的损失函数来处理多分类、回归等任务。


4 两个基模型的问题

【问题:为什么GBDT模型都会使用CART(分类和回归树)来作为基模型呢?】

这与决策树算法自身的优点有很大的关系。决策树可以认为是if-then规则的集合,易于理解,可解释性强,预测速度快 。同时,决策树算法相比于其他的算法需要更少的特征工程,比如可以不用做特征标准化,可以很好的处理字段缺失的数据,也可以不用关心特征间是否相互依赖 等。决策树能够自动组合多个特征,它可以毫无压力地处理特征间的交互关系并且是非参数化 的,因此你不必担心异常值或者数据是否线性可分(举个例子,决策树能轻松处理好类别A在某个特征维度x的末端,类别B在中间,然后类别A又出现在特征维度x前端的情况)不过,单独使用决策树算法时,有容易过拟合缺点。所幸的是,通过各种方法(比如剪枝、最大树深度、最小叶子样本数量、正则项等),抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。由此可见,梯度提升方法和决策树学习算法可以互相取长补短,是一对完美的搭档。


【还有什么抑制单棵决策树的复杂度的方法?换言之,决策树的避免过拟合的方法?】
1. 限制树的最大深度
2. 限制叶子节点的最少样本数量
3. 限制节点分裂时的最少样本数量
4. 吸收bagging的思想对训练样本采样(subsample)在学习单颗决策树时只使用一部分训练样本(样本采样)
5. 借鉴随机森林的思路在学习单颗决策树时只采样一部分特征(特征采样,同样是bagging的思想)
6. 在目标函数中添加正则项惩罚复杂的树结构等。

weinxin
我的微信
微信扫一扫
站长亦新
  • 本文由 发表于 2020年6月21日20:08:05
  • 转载请务必保留本文链接:http://helloworld2020.net/491/
AI面试之SVM推导 机器学习

AI面试之SVM推导

SVM现在主流的有两个方法。一个是传统的推导,计算支持向量求解的方法,一个是近几年兴起的梯度下降的方法。 梯度下降方法的核心是使用了hinge loss作为损失函数,所以最近也有人提出的深度SVM其实...
一分钟区别:判别模型与生成模型 数据挖掘

一分钟区别:判别模型与生成模型

1. 直观理解 先给出最直观的理解: 【判别式模型】:要确定一个图片是猫还是狗,用判别模型的方法就是根据数据集X训练模,然后把新的图片输入到模型中,模型给出这个图片是每个类别的概率。 【生成式模型】:...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: