AdaBoost
简单介绍
AdaBoost是基于boosting的思想,通过多个弱分类器的线性组合来得到强分类器,训练时重点关注被错分的样本,准确率高的弱分类器权重大。
更深一步的介绍
在训练过程中,它不改变所给的训练数据,而是不断改变训练数据权值的分布,使得被误分类的数据再后一轮的分类中受到更大的关注。
同时采用加权多数表决的方法,加大分类误差率小的弱分类器的权值,使其在最后的表决中起更大的作用,减小分类误差率大的弱分类器的权值,使其在最后的表决中起较小的作用。所有弱分类器的权值之和并不为1,是通过最后结果的符号来决定实例的类别,该结果的绝对值表示分类的确信度。(参考《统计学习方法》P140)
Adaboost 还有另外一种理解,即可以认为其模型是加法模型、损失函数为指数函数、学习算法为前向分步算法的二类分类学习方法。(参考《统计学习方法》P143)
加法模型就是多个基函数线性组合得到的模型
前向分步算法:对于加法模型,从前往后,每一步只学习一个基函数及其系数,而不是一次性学习所有的基函数,从而简化优化的复杂度。
损失函数是根据 adaboost 算法特点推导而来的。
GBDT
简单介绍
GBDT是基于boosting的思想,串行地构造多棵决策树来进行数据的预测,它是在损失函数所在的函数空间中做梯度下降,即把待求的决策树模型当作参数,每轮迭代都去拟合损失函数在当前模型下的负梯度,从而使得参数朝着最小化损失函数的方向更新。
更深一步的介绍
GBDT可以看作是AdaBoost的一个推广,AdaBoost是通过错分数据点来识别问题,通过调整错分数据点的权重来改进模型,GBDT是通过负梯度来识别问题,通过计算负梯度来改进模型,实际上,负梯度绝对值大的样例同样会在之后的训练中受到更大的关注,因为它造成的损失更容易在最后的损失函数中占很大的比重,因此,需要更多地偏向于它去减小损失。这也是GBDT和AdaBoost相似的一个点,而相比AdaBoost, Gradient Boosting可以使用更多类型的损失函数,因此可以解决更多的问题。
最常见的损失函数是平方损失函数,square loss的优点是便于理解和实现,它的负梯度就是残差,而其他损失函数的负梯度只能看作残差的近似值,它的缺点在于对于异常值它的鲁棒性较差,因此会常用absolute loss或Huber loss来代替。