提升法 Boosting 是什么?把一群弱学习器串成强学习器
提升法(Boosting)是一类集成学习方法,它把许多个“弱学习器”按顺序组合起来,得到一个效果好得多的“强学习器”。弱学习器指的是只比随机猜测好一点的简单模型,比如一棵只有一两层的决策树。
它从一个理论问题开始
1988 到 1989 年,Michael Kearns 和 Leslie Valiant 提出了一个问题:一组弱学习器能否组合成一个强学习器?1990 年,Robert Schapire 证明了答案是肯定的。1995 年前后,Yoav Freund 和 Schapire 提出了 AdaBoost 算法,让这一思想变成了实用的工具,两人因此获得了 2003 年的哥德尔奖。
核心思路:盯住错题
提升法就像一个学生反复做错题本:先训练第一个模型,看看它在哪些样本上判断错了;训练第二个模型时,让它更加关注这些被判错的样本;再看前两个模型合起来还错在哪里,训练第三个模型去弥补……每一个新的模型都在努力修正前面所有模型留下的错误。最后,把所有模型的预测按照各自的表现加权组合起来,表现好的模型说话分量更重。
这和另一种集成方法 Bagging 不同:Bagging(比如随机森林)是并行地、独立地训练很多个模型再取平均,主要用来降低方差;提升法是串行地训练,后一个模型依赖前一个模型的结果,主要用来降低偏差。
代表算法
AdaBoost:每一轮提高被判错样本的权重,让下一个模型更重视它们。梯度提升(Gradient Boosting):由 Jerome Friedman 在 2001 年系统提出,每个新模型去拟合当前整体预测的残差,也就是损失函数的负梯度,适用于各种损失函数。以决策树为基础的梯度提升树(GBDT)应用非常广泛。在此基础上出现了几个高度优化的工程实现:陈天奇开发的 XGBoost(2014 年),微软的 LightGBM(2017 年),以及 Yandex 的 CatBoost(2017 年),它们速度快、效果好,支持缺失值和类别特征的处理。
今天的地位
在表格数据,比如金融风控、广告点击率预测、销量预测、用户流失预测等任务上,梯度提升树至今仍然是最常用、效果最可靠的方法之一,在 Kaggle 等数据竞赛中长期占据主导,很多时候比深度学习更合适。需要注意的是,提升法如果迭代轮数太多,也可能过拟合,通常需要配合学习率(收缩)、限制树的深度、早停等手段来控制。