顾名思义,Gradient Boosting = Gradient Descent + Boosting。
既然是Boosting,就是在现有模型基础上进行提升,提升的方法就是找出现有模型的缺陷,然后想办法查漏补缺。
Gradient Boosting和AdaBoost的区别在哪里呢?
AdaBoost的做法是按序训练一系列的学习器,每个学习器都重点关注前一个样本分类错误的样本,具体做法是增加这部分误分的样本的权重。而Gradient Boosting则是设定一个loss function,求其对当前累加模型的Gradient,然后训练一个新的学习器来直接拟合这个Gradient。
Gradient Boosting和AdaBoost的联系在哪里呢?
首先两者都是累加模型,也就是说训练得到的多个分类器相加得到最终的输出。
其次AdaBoost实际上是Gradient Boosting的一种特殊情形。AdaBoost是最早取得成功的Boosting算法,后来有人证明AdaBoost等价于一个特殊损失函数(指数损失)的梯度下降过程,再后来有人将损失函数一般化,就得到了Gradient Boosting。
下面我们通过具体例子来说明Gradient Boosting的思路。
通过以上过程我们看到,Gradient Boosting所做的事就是,用当前算法给出一个基模型,然后做出预测
,接下来再用同样的算法拟合
得到另一个模型
,将
加到
上来提升其表现,不断重复此过程直至达到结束条件。
听起来很合理,但是被称为residuals而非gradient,为什么Gradient Boosting不叫作Residual Boosting呢?
实质上,Residual Boosting只是Gradient Boosting的损失函数为平方损失时的特殊情形,下图对此进行了说明。
注意,上图为我们揭示了Gradient Boosting的关键之处:其所谓的梯度下降是函数空间的梯度下降。也就是将各个当作参数来求导。
此外我们也看到,Residual Boosting就是损失函数为平方损失时的梯度下降过程。
可以看到,Gradient Boosting就是设定一个损失函数,将当前累加模型对应的函数视作参数并利用梯度下降法对其进行调整。
上图所示的直接拟合残差的过程可以视作学习率为1的梯度下降。
而Gradient Boosting相比Residual Boosting的好处就在于,loss function可以根据需要来选择,比如平方损失对于异常值很敏感,我们就可以采用下面两个对异常值相对稳健的loss function。
以上就是Gradient Boosting的简要介绍,重在直觉理解。图来自这里。