提升树Boosting Tree算法实例详解_程大海的博客-CSDN博客
从提升树Boosting Tree过度到梯度提升Gradient Boosting_程大海的博客-CSDN博客
GBDT梯度提升之回归算法个人理解_程大海的博客-CSDN博客_梯度回归算法
GBDT梯度提升之二分类算法个人理解_程大海的博客-CSDN博客_gbdt二分类
GBDT梯度提升之多分类算法个人理解_程大海的博客-CSDN博客_gbdt可以多分类吗
XGBoost算法个人理解_程大海的博客-CSDN博客_xgboost 叶子节点权重
交叉熵损失与极大似然估计_程大海的博客-CSDN博客_极大似然估计和交叉熵
使用泰勒展开解释梯度下降方法参数更新过程_程大海的博客-CSDN博客
AdaBoost算法实例详解_程大海的博客-CSDN博客_adaboost算法实例
之前的文章提升树实例详解中说明了提升树方法有以下几个特点:
1、损失函数:提升树方法使用平方损失或指数损失作为损失函数。当使用平方损失时,提升树算法拟合的是上一轮的残差;当使用指数损失时,提升树算法实际上就是AdaBoost算法
2、计算残差:提升树模型通过计算模型每一轮的残差,并将每一轮的残差作为新的训练集,在残差上训练新的模型参数,并使用加法模型得到最终的模型
3、学习过程:提升树算法利用加法模型和前向分布算法实现学习的优化过程。提升树方法使用加法模型将学习到的各个子模型进行相加,并且使用前向分布算法将求解最优解的问题分解为若干部的迭代求解问题。
梯度提升方法的核心:梯度提升方法利用梯度下降的思想,将目标模型的作为整体的优化目标,而不是只关注最小粒度的各个模型参数,将迭代学习中的每一次模型更新变换类比传统梯度下降方法中的参数更新变化。传统梯度下降方法在参数空间中进行搜索,梯度提升方法将每一轮学习到的新的函数 f(x) 作为参数,以函数作为优化单位,在函数空间中进行梯度下降。利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
我自己一直对于梯度提升方法为什么可以使用损失函数的负梯度在当前模型的值作为提升树中残差的近似值感到疑惑?找到两种关于这种近似成立的解释,仅做参考:
解释一:
以下部分参考:集成学习之Boosting —— Gradient Boosting原理 - massquantity - 博客园
这里首先回顾一下梯度下降 (Gradient Descend)。机器学习的一大主要步骤是通过优化方法最小化损失函数L(θ),进而求出对应的参数θ。梯度下降是经典的数值优化方法,其参数更新公式(1.2):
Gradient Boosting 采用和AdaBoost同样的加法模型,在第m次迭代中,前m-1个基学习器都是固定的,即公式(1.3):
因而在第m步我们的目标是最小化损失函数 ,进而求得相应的基学习器。若将f(x)当成参数,则同样可以使用梯度下降法,公式(1.4):
对比式 (1.2)和 (1.3),可以发现若将,即用基学习器hm(x)拟合前一轮模型损失函数的负梯度,就是通过梯度下降法最小化L(f) 。由于f(x)实际为函数,所以该方法被认为是函数空间的梯度下降。
负梯度也被称为“响应 (response)”或“伪残差 (pseudo residual)”,从名字可以看出是一个与残差接近的概念。直觉上来看,残差r=y−f(x)越大,表明前一轮学习器f(x)的结果与真实值y相差较大,那么下一轮学习器通过拟合残差或负梯度,就能纠正之前的学习器犯错较大的地方。
解释二:
以下部分参考:梯度提升(Gradient Boosting)算法
当使用平方损失函数进行回归模型训练时,损失函数如下式(2.1):
对损失函数求关于F(x)的偏导数,得到下式(2.2):
并且,当使用平方损失函数时,当前模型在t-1轮的残差是式(2.3):
通过式子2.2、2.3可知,当使用平方损失函数时,当前模型在t-1轮的残差刚好等于损失函数对F(x)的偏导数在t-1轮的值乘以-1。因此,通过这种特例推广到一般场景,则在梯度提升方法中,对于一般损失函数,可以使用损失函数的负梯度在当前模型的值来近似模型的残差。
将决策树作为梯度提升Gradient Boosting方法的基学习器base_estimator,就得到了梯度提升回归树GBDT和梯度提升分类树GBDT。