外观
AdaBoost 可视化指南
A Visual Guide to AdaBoost
下面的可视化总结了提升(boosting)模型的工作方式:

- Boosting 是一个迭代的训练过程。
- 后续模型会更加关注前一个模型误分类的样本。
- 最终预测是所有预测的加权组合。
然而,许多人觉得难以理解这个模型究竟是如何训练的,以及样本是如何为后续模型重新加权的。AdaBoost 是一种常见的 Boosting 模型,所以在本章中,让我们了解它的工作原理。
AdaBoost 背后的核心思想是训练许多弱学习器来构建一个更强大的模型。这种技术也被称为集成(ensembling)。具体到 AdaBoost,弱分类器(classifier)逐步从前一个模型的错误中学习,整体考虑时便构建出一个强大的模型。

这些弱学习器通常是决策树。让我用 sklearn 的 DecisionTreeClassifier 类来实现 AdaBoost,以便说得更清楚。
假设我们有如下的分类数据集:

开始时,每一行的权重相等,都等于 (1/n),其中 n 是训练实例的数量。

在 AdaBoost 中,每棵决策树的深度都是 1,它们也被称为树桩(stump)。
因此,我们定义一个 max_depth 为 1 的 DecisionTreeClassifier,并在上述数据集上训练它。

当然,会有一些正确和不正确的预测。

这个特定弱学习器的总代价(或误差/损失)是不正确预测的权重之和。在我们的例子中,有两个错误,所以总误差为:

现在,如前所述,其思想是让弱学习器逐步从前一个学习器的错误中学习。所以接下来,我们希望后续模型更多地关注之前产生的不正确预测。我们的做法如下:
首先,我们确定弱学习器的重要性。很直观地,我们希望重要性与上述误差成反比。
- 如果弱学习器的误差较高,它的重要性就必须较低。
- 如果弱学习器的误差较低,它的重要性就必须较高。
一种选择是如下的函数:

- 这个函数仅在 [0, 1] 之间有定义。
- 当误差较高(~1)时,意味着没有正确预测 → 这会给弱学习器一个负的重要性。
- 当误差较低(~0)时,意味着没有错误预测 → 这会给弱学习器一个正的重要性。这样一来,重要性越高的弱学习器在最终预测中所占的权重就越大。
现在,我们得到了学习器的重要性。

重要性值在模型推理时用于对弱学习器的预测进行加权。所以下一步是……
所有正确的预测按如下方式降低权重:

而所有不正确的预测按如下方式提高权重:

完成后,我们对新权重进行归一化,使其总和为 1。

就是这样!
从第 4 步,我们得到了重新加权的数据集。

我们按照新权重的比例从该数据集中采样实例,以创建一个新的数据集。
接下来,回到第 1 步——训练下一个弱学习器。

并针对某个预定义的最大迭代次数反复重复上述过程。这就是我们构建 AdaBoost 模型的方式。我们要做的就是把前一个模型的误差考虑进来,为下一个模型重新加权并采样训练实例,然后重复。