GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差(负梯度),这个残差就是一个加预测值后能得到真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里面我们把A的年龄设为6岁去学习,比如第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里面把A的年龄设为1岁去学习,继续学。Boosting的最大好处在于,每一步的残差计算其实变相的增大了分错的instance的权重,而已经分对的instance则都趋于0。这样后面的树就能越来越专注那些前面被分错的instance。
GBDT为什么要用损失函数负梯度拟合损失,为什么不直接用预测值和真实值的差值来当残差呢?
GBDT从名字上来看,本质是借鉴了梯度下降法来实现目标函数的最小化,所以归根到底我们要拟合的是负梯度,这是下降最快的方向。
拟合预测值和真实值的差值也是可行的,但他不一定是最快的下降方式,而在目标函数是平方损失时,可以验证这时候负梯度恰好是预测值和真实值的差值,所以才有了拟合残差这样的说法。
均方差损失函数:
此时的负梯度是这样计算的:
所以,当损失函数选用均方损失函数是时,每一次拟合的值就是(真实值 - 当前模型预测的值),即残差。
但当目标函数不是平方损失时,我们当然还是希望用有最快的下降方向,也就是负梯度方向,这个时候残差也可以用,但是不如负梯度下降的快。