概念原理
个体学习器之间存在强依赖关系、必须串行集成,则应选择提升法(Boosting方法)。提升法的主要代表包括AdaBoost、GBDT、XGBoost及其改进等。各类Boosting方法的基本思想是一致的, 典型的操作实现过程是:
1、首先从训练集用初始权重训练出一个基学习器x1,得到该学习器的经验误差;然后对经验误差进行分析,基于分析结果调高学习误差率高的训练示例的权重,使得这些误差率高的训练示例在后面的学习器中能够受到更多的关注;再后基于更新权重后的训练集训练出一个新的弱学习器x2。
2、不断重复这一过程,直到满足训练停止条件(比如基学习器达到指定数目),生成最终的强学习器。注意:在训练的每一轮都要检查当前生成的基学习器是否满足基本条件。
3、将所有基学习器预测结果进行加权融合并输出,比如AdaBoost通过加权多数表决的方式,即增大错误率小的基学习器的权值,同时减小错误率较大的基学习器的权值。 综上所述,提升法在单个基学习器训练过程中,通过提高训练错误示例权重,以使其受到更多关注,从而在下一轮训练中得到提升;而最终模型中则提高错误率小的基学习器的权值,从而实现整体预测能力的提升。
AdaBoost(自适应提升法)
一、分类问题的提升法
AdaBoost最初仅适用于分类问题,是基学习器的加权线性组合,其基本思想是:首先根据训练集的大小,按照均匀分布原则,初始化样本示例权重,也就是说所有样本示例的权重都相等;然后在后面的每一轮训练中,都依据样本示例预测表现进行权重更新,如果样本被错误分类,则其权重会被乘以一个大于1的倍数,如果样本被正确分类则保持原权重不变,然后通过权重标准化(所有样本示例权重之和为1)的方式,提升被错误分类样本示例的权重,使其在新一轮训练中得到更多的关注,直至该样本被正确分类。在满足一定规则时(达到规定迭代次数或规定误差率),训练停止;训练过程中,每一轮都会得到一个基学习器,针对分类越为准确的基学习器给予一个越高的权重,然后加权形成最终的强学习器。
不难看出,AdaBoost算法一方面不断进行权重更新,使得模型能够更加关注在特征空间内预测错误的区域,从而降低了整体的偏差;另一方面,该算法也是多个基学习器的集成,同样有样本搅动,所以也在一定程度上降低了整体的方差。与我们上一章中介绍的Bagging相比,Bagging方法采用的是Bootstrap(有放回的均匀抽样),训练样本集的选择是随机的,各轮训练样本集之间相互独立;而AdaBoost则根据错误率来取样,从加权的分布中进行抽样,各轮训练集的选择与前面各轮的学习结果有关,因此通常来说AdaBoost的分类精度要优于Bagging。但同样的,Adaboost算法会使得难于分类样本的权值呈指数增长,后续的训练过程将会过于偏向这类困难样本,从而导致Adaboost算法容易受极端值干扰。 从统计学的角度来理解,二分类问题的AdaBoost算法,等价于使用指数损失函数的前向分段加法模型(证明过程略,可参阅相关文献)。
梯度提升法(Gradient Boosting machine)
前面我们讲述的AdaBoost算法,本质上是使用指数损失函数(二分类问题)或误差平方损失函数(回归问题)的前向分段加法模型实现算法优化。但是如果我们把损失函数扩展到一般损失函数,这一实现过程很可能就会变得非常复杂。为了解决这一问题,Freidman提出了梯度提升法,梯度提升法是AdaBoost算法的推广,其特色在于以非参数方式估计基函数,并在函数空间内使用梯度下降(Gradient Descent)进行近似求解。所谓梯度下降,就是使损失函数越来越小,在求解约束优化问题时,梯度下降是最常采用的方法之一。具体来说,就是根据当前模型损失函数的负梯度信息来训练新加入的基学习器,然后将训练好的基学习器以累加的形式结合到现有模型中,通过梯度提升的方式,不断优化参数,直至达到局部最优解。
XGBoost
XGBoost(Extreme Gradient Boosting),也称极限梯度提升算法,为陈天奇所设计,基础方法仍旧是梯度提升法,但是做了很多改进,包括使用牛顿法计算下降方向、改进决策树算法、使用稀疏矩阵等等,被认为是在解决分类问题和回问题上都拥有超高性能的先进评估器,尤其比较适用于样本示例全集容量较大的数据,目前已广泛应用于建模平台比赛、数据咨询等行业。