Boosing 是一族可以将弱学习器提升为强学习器的算法。这族算法的工作机制是:先从初始化训练集训练处一个基学习器,再根据学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直到学习器的数目达到指定的数量,最终将这多个基学习器进行加权集合,如下公式所示:

在【图-1】公式中,α 表示分类器 ht 分类器的权重,越重要的分类器其权重就越大,反之亦反。根据计算结果的符号来判别分类。
Boosting 族算法最著名的代表是 AdaBoost 算法。Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的弱分类器,然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器),其主要包含:
- 样本权重
- 模型错误率
- 基分类器权重
1. 样本权重
Adaboost 在训练分类器时,会根据预测结果更新样本的权重。样本的初始权重是:1/m,m 代表样本的个数。当预测错误时,会增加样本的权重,当预测正确时,会降低样本的权重。我们可以用下面的公式来表示:

yi 表示第 i 个样本的结果。
αt 表示第 t 个分类器的权重,αt > 0。
ht(xi) 表示第 t 个分类器对 i 样本的预测结果。
如果 yi == ht(xi) 时,e-yiαtht(xi) 为小于 1 的数。此时,样本的权重乘以该数会变得比原来小,即:在预测正确的情况下,降低了样本的权重。分类器权重 α 的值越大,则样本权重降低得越大。
如果 yi ≠ ht(xi) 时,e-yiαtht(xi) 为大于 1 的数。此时,样本的权重乘以该数会变得比原来大,即:在预测错误的情况下,增加了样本权重。分类器权重 α 的值越小,则样本权重增加得越小。
Zt 是所有样本的权重值和,此处作为标准化系数,使得我们的样本权重值能够符合概率分布。
2. 模型错误率
我们需要知道一个样本究竟有多少个分类器将样本分类错误,这个是我们知道模型参数 α 的重要步骤。 我们将【图-2】公式进行推导,将会得到模型错误率,推导过程如下:


【图-4】公式的计算结果是 ≤ 1 的,而 e-yif(xi) ≥ 1,得到如下公式:

【图-5】公式的右半部分即为模型错误率的上限,我们的问题转变为了:如何降低模型错误率上限?
3. 基分类器权重
基分类器权重即【图-1】中的 α 值。这个 α 值可以通过最小化【图-5】右半部分的分类误差率上限得到。
由【图-3】得到:

将【图-6】代入到【图-5】右半部分的公式中,可得到:


现在的问题就变成下列问题:

Z 的计算如下:

假如我们的分类结果是 -1,+1,则可以得到下列公式:

P(yi=h(xi)) 和 P(yi≠h(xi)) 表示对当前样本分类正确和分类错误的分类器个数占目前的分类器总数的比重。此时,我们可以将【图-10】公式转换为:

接下来,我们对 α 求导,得出:

我们对【图-13】求解下:

设:样本的错误率 P(yi≠h(xi)) 为 ε,则【图-14】公式可以变为如下形式:

由于 Adaboost 中的 N 个分类器使用的是串行的模型,当进行到第 i 个分类器时,我们无法计算出所有分类器的错误率。所以,我们只计算当前 i 个分类器的错误率。

知道了错误率如何计算,我们就可以迭代出每一个分类器的权重,