AdaBoost
1.算法流程
设训练数据集 T = {(x1, y1), (x2, y2), ⋯, (xN, yN)}, xi ∈ 𝒳 ⊆ Rn, xi ∈ 𝒴 = {−1, +1}
(1)初始化时训练数据的权重
(2)对 m = 1, 2, ⋯, M ,使用具有权重分布的 Dm 进行训练,得到基本分类器
Gm(x) : 𝒳 → {−1, +1}
计算 Gm(x) 在训练数据集上的分类误差率:
将
当
Dm + 1 = (wm + 1, 1, ⋯, wm + 1, i, ⋯, wm + 1, N)
当 yi = Gm(xi) 时 yiGm(xi) = 1 ,因此被分类正确的样本权重在减小,而误分类的样本权重在增大。 Zm 是规范因子:
(3)构建基本分类器的线性组合
得到最终分类器:
其中,
2.示例
给定训练样本:
初始化数据权值分布:
D1 = (w11, w12, ⋯, w110), w1i = 0.1, i = 1, 2, ⋯, 10
迭代过程1, m = 1
(a)在权值分布为 D1 的训练数据上,阈值 v 取2.5时分类误差率最低,基本分类器为:
- G1(x) 在训练数据集上误差率 e1 = P(G1(xi) ≠ yi) = 0.3 .
(c)计算 G1(x) 系数:
(d)更新训练数据的权值分布:
D2 = (0.07143, 0.07143, 0.07143, 0.07143, 0.07143, 0.07143, 0.16667, 0.16667, 0.16667, 0.07143)
f1(x) = 0.4236G1(x) ,分类器 sign(f1(x)) 在训练集上有3个误分类点。
迭代过程2, m = 2 ,
(a)在权值分布为 D2 的训练数据上,阈值 v 取8.5时分类误差率最低,基本分类器为:
- G2(x) 在训练数据集上误差率 e2 = 0.2143 .
(c)计算 α2 = 0.6496 .
(d)更新训练数据的权值分布:
D3 = (0.0455, 0.0455, 0.0455, 0.16667, 0.16667, 0.16667, 0.1060, 0.1060, 0.1060, 0.0455)
f2(x) = 0.4236G1(x) + 0.6496G2(x) ,分类器 sign(f2(x)) 在训练集上有3个误分类点。
迭代过程3, m = 3 ,
(a)在权值分布为 D3 的训练数据上,阈值 v 取5.5时分类误差率最低,基本分类器为:
- G3(x) 在训练数据集上误差率 e3 = 0.1820 .
(c)计算 α3 = 0.7514 .
(d)更新训练数据的权值分布:
D4 = (0.125, 0.125, 0.125, 0.102, 0.102, 0.102, 0.065, 0.065, 0.065, 0.125)
f3(x) = 0.4236G1(x) + 0.6496G2(x) + 0.7514G3(x) ,分类器 sign(f3(x)) 在训练集上有0个误分类点。分类器最终为:
G(x) = sign[f3(x)] = sign[0.4236G1(x) + 0.6496G2(x) + 0.7514G3(x)]
3.AdaBoost训练误差分析
AdaBoost误差上界为:
当 G(xi) ≠ yi 时,yif(xi) < 0 ,因此 exp (−yif(xi)) ≥ 1 ,前半部分得证。
后半部分,别忘了有:
推导如下:
因此我们可以在每一轮选取适当的 Gm 使得 Zm 最小,从而使训练误差下降的最快。对于二分类问题,有如下结果:
其中
证明:
当 yi = Gm(xi)
时 yiGm(xi) = 1
,当 yi ≠ Gm(xi)
时 yiGm(xi) = −1
,
至于不等式:
可由 ex
和
另外,如果存在 γ > 0 ,对所有 m 有 γm ≥ γ ,则:
这个结论表明,AdaBoost的训练误差是以指数速率下降的。另外,AdaBoost算法不需要事先知道下界 γ ,AdaBoost具有自适应性,它能适应弱分类器各自的训练误差率。
4.AdaBoost算法另一种解释
AdaBoost算法可以看做是模型为加法模型、损失函数为指数函数、学习方法为前向分步算法时的二分类学习方法。
4.1.前向分步算法
加法模型(additive model)如下:
其中 b(x; γm) 为基函数, γm 为基函数参数, βm 为基函数系数。
在给定训练数据和损失函数 L(y, f(x)) 的条件下,学习加法模型 f(x) 成为经验风险极小化即损失函数极小化问题:
该问题可以作如此简化:从前向后,每步只学习一个基函数及其系数,逐步逼近上式,即每步只优化如下损失函数:
这就是向前分步算法。
向前分步算法流程
输入:训练数据集T = {(x1, y1), (x2, y), ⋯, (xN, yN)};损失函数 L(y, f(x)) ;基函数集{b(x; γ)}。
输出:加法模型 f(x)
(1)初始化 f0(x) = 0
(2)对 m = 1, 2, ⋯, M
(a)极小化损失函数
得到参数 βm, γm
(2)更新
fm(x) = fm − 1(x) + βmb(x; γm)
(3)得到加法模型
前向分步算法将同时求解从 m = 1 到 M 所有参数 βm, γm 的优化问题简化为逐次求解各个 βm, γm 的优化问题。
4.2.前向分步算法与AdaBoost
AdaBoost算法是前向分步加法算法的特例。其模型是由基本分类器组成的加法模型,其损失函数是指数函数。
AdaBoost的基本分类器为 Gm(x) ,其系数为 αm , m = 1, 2, ⋯, M ,AdaBoost的最终模型即最终的加法模型为:
前向分步算法逐一学习基函数的过程,与Adaboost算法逐一学习各个基本分类器的过程一致。
下面证明前向分步算法的损失函数是指数损失函数 L(y, f(x)) = exp [−yf(x)] 时,其学习的具体操作等价于AdaBoost算法学习的具体操作。
假设经过 m − 1 轮迭代前向分步算法已经得到 fm − 1(x):
fm − 1(x) = fm − 2(x) + αm − 1Gm − 1(x) = α1G1(x) + ⋯ + αm − 1Gm − 1(x)
在第 m 轮迭代得到 αm, Gm(x) 和 fm(x) :
fm(x) = fm − 1(x) + αmGm(x)
目标是使前向分步算法得到的 αm 和 Gm(x) 使 fm(x) 在训练数据集 T 上的指数损失最小,即
假定 G1(x), ⋯, Gm − 1(x)
和 α1, ⋯, αm − 1(x)
为已知参数,现在求解 Gm(x), αm
,并令
接下来,便是要证使得上式达到最小的αm*和Gm*(x)就是Adaboost算法所求解得到的 αm 和 Gm(x) .
接下来先求Gm*(x)再求αm*,对任意 α > 0 ,使上式 (αm, Gm(x)) 最小的 G(x) 由下式得到:
其中
Gm*(x) 即为AdaBoost算法中所求的 Gm(x) ,它是在第 m 轮加权训练数据时,使分类误差率最小的基本分类器;在Adaboost算法的每一轮迭代中,都是选取让误差率最低的阈值来设计基本分类器。
之后求 αm* ,式 (αm, Gm(x)) 后半部分为:
将 Gm* 代入,并对 α 求导,使导数等于0:
即,
可得:
这里的 αm* 与 AdaBoost 算法的 αm 完全一致。
最后看每一轮样本的权值更新,由 fm(x) = fm − 1(x) + αmGm(x)
以及
可得,
只差规范因子 Zm :
因而二者等价。