Skip to content

AdaBoost 可视化指南

A Visual Guide to AdaBoost

下面的可视化总结了提升(boosting)模型的工作方式:

ds p282 1

  • Boosting 是一个迭代的训练过程。
  • 后续模型会更加关注前一个模型误分类的样本。
  • 最终预测是所有预测的加权组合。

然而,许多人觉得难以理解这个模型究竟是如何训练的,以及样本是如何为后续模型重新加权的。AdaBoost 是一种常见的 Boosting 模型,所以在本章中,让我们了解它的工作原理。

AdaBoost 背后的核心思想是训练许多弱学习器来构建一个更强大的模型。这种技术也被称为集成(ensembling)。具体到 AdaBoost,弱分类器(classifier)逐步从前一个模型的错误中学习,整体考虑时便构建出一个强大的模型。

ds p283 1

这些弱学习器通常是决策树。让我用 sklearn 的 DecisionTreeClassifier 类来实现 AdaBoost,以便说得更清楚。

假设我们有如下的分类数据集:

ds p283 2

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

ds p283 3

在 AdaBoost 中,每棵决策树的深度都是 1,它们也被称为树桩(stump)。

因此,我们定义一个 max_depth 为 1 的 DecisionTreeClassifier,并在上述数据集上训练它。

ds p284 1

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

ds p284 2

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

ds p284 3

现在,如前所述,其思想是让弱学习器逐步从前一个学习器的错误中学习。所以接下来,我们希望后续模型更多地关注之前产生的不正确预测。我们的做法如下:

首先,我们确定弱学习器的重要性。很直观地,我们希望重要性与上述误差成反比。

  • 如果弱学习器的误差较高,它的重要性就必须较低。
  • 如果弱学习器的误差较低,它的重要性就必须较高。

一种选择是如下的函数:

ds p285 1

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

现在,我们得到了学习器的重要性。

ds p286 1

重要性值在模型推理时用于对弱学习器的预测进行加权。所以下一步是……

所有正确的预测按如下方式降低权重:

ds p286 2

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

ds p286 3

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

ds p286 4

就是这样!

从第 4 步,我们得到了重新加权的数据集。

ds p287 1

我们按照新权重的比例从该数据集中采样实例,以创建一个新的数据集。

接下来,回到第 1 步——训练下一个弱学习器。

ds p287 2

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

本站内容仅供学习交流,版权归原作者所有。