AdaBoost 自适应提升(三)计算案例

AdaBoost 核心思想是关注错误样本、动态调整权重。每轮训练后,提高被当前弱学习器误分类样本的权重,让后续弱学习器更聚焦于这些难分样本。同时,根据弱学习器的分类精度,为其分配不同权重(精度越高,权重越大),最终通过加权投票得到强学习器。

接下来,以具体案例为核心,拆解完整训练过程,帮助大家理解自适应权重调整的本质。我们采用10 个样本的 3 分类任务,数据如下表所示。特征仅 1 个,类别分为 0、1、2,任务是训练多个弱决策树,实现对样本的分类。

样本编号特征 X真实类别
11.00
21.50
32.00
43.01
53.51
64.01
75.02
85.52
96.02
103.81

AdaBoost(SAMME)的训练过程可以总结为以下步骤:

  1. 初始化:样本权重 = 1/N
  2. 训练弱决策树(树桩)
  3. 计算弱学习器错误率
  4. 计算弱学习器的权重
  5. 更新下轮样本的权重
  6. 循环 2-5 步,直到达到停止的条件

1. 模型起步

训练开始前,因为我们对样本难分程度无先验认知,所以样本的权重均等。样本总数为 10,故每个样本的初始权重为 0.1。

样本编号特征 X真实标签初始权重
11.000.1
21.500.1
32.000.1
43.010.1
53.510.1
64.010.1
75.020.1
85.520.1
96.020.1
103.810.1

2. 首次训练

我们基于这些带权重的样本训练第一个弱决策树,核心是找一个切分点。在 scikit-learn 1.7.2 中决策树的构建默认使用 gini 分裂增益计算方法。我们以 4.5 为例,将训练集分为两部分:

样本编号特征 X真实标签初始权重
11.000.1
21.500.1
32.000.1
43.010.1
53.510.1
64.010.1
75.020.1
85.520.1
96.020.1
103.810.1

接下来计算该分裂的分类增益:

基尼不纯度计算方法:/archives/84678.html

我们按照相同的方法,计算所有候选切分点的加权基尼不纯度,选择值最小的点进行此次分裂。

接下来,基于下面的公式计算模型的错误率。错误样本共 3 个,其权重和为 0.1+0.1+0.1=0.3,所以该模型的错误率为:0.3

样本编号特征 X真实标签初始权重预测标签
11.000.11 – ×
21.500.11 – ×
32.000.11 – ×
43.010.11 – √
53.510.11 – √
64.010.11 – √
75.020.12- √
85.520.12- √
96.020.12- √
103.810.11- √

在前面公式推导的时候,我们并没有引入学习率的概念。在 AdaBoost 中,学习率用于控制单个弱分类器权重贡献程度,它决定了弱分类器对最终模型的影响幅度。

  • η 越小,单个弱分类器的权重越低,模型收敛越慢,但可能更稳定
  • η 越大,单个弱分类器的权重越高,模型收敛越快,但容易过拟合

如果没有学习率,假设模型受到异常、噪声的影响,导致某个模型话语权太大, 一旦它判断失误,对最终结果影响太大了。

我们在计算模型权重时,已经把学习率作用到模型的权重的计算中(\( \eta=0.3、K=3、err_{t}=0.3 \)):

最终计算得到第一个弱学习器的权重为:0.4621注意:学习率直接计算到模型权重上了。

接着,更新样本的权重。如果之前对该样本预测错误,则提高样本权重,否则权重不变。然后重新归一化,得到第二轮迭代需要的样本权重。

计算举例:

  • 1号样本预测错误,则其权重为:\( 0.1 \times \exp(0.4621) = 0.15874 \)
  • 4号样本预测正确,则其权重为:\( 0.1 \times \exp(0) = 0.1 \)

以此类推,计算所有样本新的权重,然后再归一化,如下图所示:

样本编号特征 X真实类别预测类别更新权重分数归一化权重
11.001 – ×0.158750.13496
21.501 – ×0.158750.13496
32.001 – ×0.158750.13496
43.011 – √0.10.08502
53.511 – √0.10.08502
64.011 – √0.10.08502
75.022- √0.10.08502
85.522- √0.10.08502
96.022- √0.10.08502
103.811 – √0.10.08502

我们会发现:样本权重的更新依赖模型权重,而学习率已经作用到模型权重中,相当于间接影响了样本权重的计算。较大的学习率,模型的权重较大,误分类样本权重会较大幅度调整,反之,样本的权重调整幅度较小,模型的训练过程也相对保守一些。

3. 持续优化

基于新的样本权重权重训练第二个弱学习器:

计算当前弱学习器的错误率,错误的样本为 7、8、9,其权重和为:\( 0.08502 + 0.08502 + 0.08502 = 0.25506 \)

样本编号特征 X真实标签归一化权重预测标签
11.000.134960 – √
21.500.134960 – √
32.000.134960 – √
43.010.085021 – √
53.510.085021 – √
64.010.085021 – √
75.020.085021 – ×
85.520.085021 – ×
96.020.085021 – ×
103.810.085021 – √

接着计算当前弱学习器的权重(0.5295):

最后,更新样本权重(省略计算过程),循环迭代构建多个弱学习器。

当满足以下条件时,停止训练:

  • 当构建的弱学习器数量达到指定的数量,停止训练
  • 当构建的弱学习器错误率为 0 时,已经能够正确区分所有样本,停止训练
  • 当弱学习器的错误率高于随机猜测的错误率 \(1-1/K\) 时,模型的权重是负值,那么样本的权重在更新时,分类错误样本权重会降低,分类正确的样本权重会上升,这使得继续训练会产生更大的错误,所以停止训练。