如何理解GBDT里面“损失函数的负梯度在当前模型的值,可以作为残差的估计”?

  统计/机器学习 监督式学习 损失函数    浏览次数:9938        分享
2

当损失函数为误差平方函数时,gbdt拟合的是残差,从认知上也很好理解,我们希望每一次迭代在原来预测值的基础上逐渐逼近真实值,因此不断地去拟合残差。

但是当推广的一般函数时,如绝对值损失函数和Huber损失函数时,Freidman提出了梯度提升算法:利用最速下降的近似方法,即利用损失函数的负梯度在当前模型的值,作为回归问题中提升树算法的残差的近似值,拟合一个回归树。如何理解?在这第k轮迭代时,这时的目标函数应该就是损失函数,这时候的变量是什么?不变量是什么?负梯度是对谁求的梯度?看了大量博文,还是难以理解。

 

dzzxjl   2018-03-12 16:08



   1个回答 
2

你的疑问应该在于:“如何理解?在这第k轮迭代时,这时的目标函数应该就是损失函数,这时候的变量是什么?”。

首先,GBDT 的基分类器可以是回归树或者是分类树,在回归任务下,GBDT 在每一轮的迭代时对每个样本都会有一个预测值,此时的损失函数为均方差损失函数,

$$\large L(y_i,F(x_i))=\left(\frac{1}{2}\right)*(y_i-F(x_i))^2$$

那此时的负梯度是这样计算的

$$\large -\left[\frac{\partial L(y_i,F(\mathbf{x}_i))}{\partial F(\mathbf{x}_i)}\right]=(y_i-F(x_i))$$

所以,当损失函数选用均方损失函数是时,每一次拟合的值就是(真实值-当前模型的值),即残差。

此时的变量是$F(\mathbf{x}_i)$,即“当前模型的值”,也是对它求负梯度。


SofaSofa数据科学社区DS面试题库 DS面经

libinx   2018-10-15 01:07

在这里看到了熟人 哈哈 - dzzxjl   2018-10-17 10:40


  相关讨论

GBDT的损失函数为绝对值时,每棵树去拟合梯度吗?还是仍拟合残差?

GBDT做分类时,算出残差结果以后,以什么作为损失函数去判断在哪里分叉?

GBDT做回归时,如果设定树的深度为2,那树的第一层是用残差计算方差还是用原来的Y计算方差?

logloss的取值范围是多少?一般好的分类器能达到多少?

关于损失函数h(x), J(x), cost的概念问题

Hamming Loss汉明损失的计算公式是什么?

怎么理解surrogate loss function代理损失函数?

回归树是以什么标准来选特征的?

二元分类为什么不能用MSE做为损失函数?

python求logloss

  随便看看

怎么直观理解ROC AUC的概率统计意义?

xgboost怎么调参?

pandas报错ValueError: Cannot convert non-finite values (NA or inf) to integer

Resnet-18, Resnet-50, Resnet-101这些模型里的数字是什么意思?

怎么在jupyter notebook里查看python的版本?