综述
对于分类问题而说,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易很多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基分类器),然后组合这些弱分类器,构成一个强分类器。大多数提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
AdaBoost算法是Boosting(提升)算法的典型代表,在1995年由Freund和Schapire提出。在每一轮的训练中,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。然后,AdaBoost采取加权多数表决的方法,具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
定义
假设给定一个二分类的训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)}其中,每个样本点由实例(特征)与标记(标签)组成。实例
x
i
∈
X
⊆
R
n
x_i\in\mathcal X\subseteq \bf R^n
xi∈X⊆Rn,标记
y
i
∈
Y
=
{
+
1
,
−
1
}
y_i \in \mathcal Y=\{+1,-1\}
yi∈Y={+1,−1},
X
\mathcal X
X 是实例空间,
Y
\mathcal Y
Y 是标记集合。AdaBoost利用以下算法,从训练数据中学习一系列弱分类器或基分类器,并将这些弱分类器线性组合成为一个强分类器。
- 初始化训练数据的权值分布
D 1 = ( w 11 , . . . , w 1 i , . . . , w 1 N ) ,        w 1 i = 1 N ,        i = 1 , 2 , . . . , N D_1=(w_{11},...,w_{1i},...,w_{1N}),\;\;\;w_{1i}=\frac{1}{N},\;\;\;i=1,2,...,N D1=(w11,...,w1i,...,w1N),w1i=N1,i=1,2,...,N假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这一假设保证第1步能够在原始数据上学习基本分类器 G 1 ( x ) G_1(x) G1(x)。 - 对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M
2.1 使用具有权值分布 D m D_m Dm 的训练数据集学习,得到基本分类器
G m ( x ) : X → { + 1 , − 1 } G_m(x):\mathcal X \rightarrow \{+1,-1\} Gm(x):X→{+1,−1}
2.2 计算 G m ( x ) G_m(x) Gm(x) 在训练数据集上的分类误差率:
e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i) em=P(Gm(xi)̸=yi)=i=1∑NwmiI(Gm(xi)̸=yi)其中, w m i w_{mi} wmi 表示第 m m m 轮中第 i i i 个实例的权值, ∑ i = 1 N w m i = 1 \sum_{i=1}^Nw_{mi}=1 ∑i=1Nwmi=1。
2.3 计算基本分类器 G m ( x ) G_m(x) Gm(x) 的系数 α m \alpha_m αm:
α m = 1 2 log 1 − e m e m \alpha_m=\frac{1}{2}\log\frac{1-e_m}{e_m} αm=21logem1−em α m \alpha_m αm 表示 G m ( x ) G_m(x) Gm(x) 在最终分类器中的重要程度, α m \alpha_m αm 随着 e m e_m em 的减小而增大,分类误差率越小的基分类器在最终分类器中的作用越大。
2.4 更新训练数据集的权值分布
D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N ) w m + 1 , i = w m i Z m exp ( − α m y i G m ( x i ) ) = { w m i Z m e − α m , G m ( x i ) = y i w m i Z m e α m , G m ( x i ) ≠ y i ,        i = 1 , 2 , . . . , N D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N}) \\ ~\\ w_{m+1,i}=\frac{w_{mi}}{Z_m}\exp(-\alpha_my_iG_m(x_i)) =\begin{cases} \frac{w_{mi}}{Z_m}e^{-\alpha_m}, G_m(x_i)=y_i \\ \frac{w_{mi}}{Z_m}e^{\alpha_m}, G_m(x_i)\neq y_i \end{cases} ,\;\;\;i=1,2,...,N Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N) wm+1,i=Zmwmiexp(−αmyiGm(xi))={Zmwmie−αm,Gm(xi)=yiZmwmieαm,Gm(xi)̸=yi,i=1,2,...,N Z m Z_m Zm 是规范化因子
Z m = ∑ i = 1 N w m i exp ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^Nw_{mi}\exp(-\alpha_my_iG_m(x_i)) Zm=i=1∑Nwmiexp(−αmyiGm(xi))它使 D m + 1 D_{m+1} Dm+1 成为一个概率分布。
由此可以看出,被基分类器误分类的样本的权值扩大,而被正确分类的样本的权值缩小,因此被误分类的样本在下一轮学习中起到更大的作用。不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同作用,这是AdaBoost算法的一大特点。 - 构建基本分类器的线性组合
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^M\alpha_mG_m(x) f(x)=m=1∑MαmGm(x)
得到最终分类器:
G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(f(x))=sign\left(\sum_{m=1}^M\alpha_mG_m(x)\right) G(x)=sign(f(x))=sign(m=1∑MαmGm(x))线性组合 f ( x ) f(x) f(x) 实现 M M M 个基本分类器的加权表决。系数 α m \alpha_m αm 表示是了基本分类器 G m ( x ) G_m(x) Gm(x) 的重要性,注意:这里所有 α m \alpha_m αm 之和并不为1. f ( x ) f(x) f(x) 的符号决定实例 x x x 的类, f ( x ) f(x) f(x) 的绝对值表示分类的确信度。利用基分类器的线性组合构建最终分类器是AdaBoost算法的又一特点。
另一种解释
AdaBoost算法还有另一种解释,即认为它是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。
前向分步算法
加法模型:
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m)
f(x)=m=1∑Mβmb(x;γm)其中,
b
(
x
;
γ
m
)
b(x;\gamma_m)
b(x;γm) 为基函数,
γ
m
\gamma_m
γm 为基函数的参数,
β
m
\beta_m
βm 为基函数的系数。
在给定训练数据及损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x)) 的条件下,学习加法模型
f
(
x
)
f(x)
f(x) 成为经验风险极小化即损失函数极小化问题:
min
β
m
,
γ
m
∑
i
=
1
N
L
(
y
i
,
∑
m
=
1
M
β
m
b
(
x
i
;
γ
m
)
)
\min_{\beta_m,\gamma_m}\sum_{i=1}^NL\left(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m)\right)
βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm))前向分步算法求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度,每步只需优化如下损失函数:
min
β
,
γ
∑
i
=
1
N
L
(
y
i
,
β
b
(
x
i
;
γ
)
)
\min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma))
β,γmini=1∑NL(yi,βb(xi;γ))
前向分布算法:
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)};损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x));基函数集
{
b
(
x
;
γ
)
}
\{b(x;\gamma)\}
{b(x;γ)}
输出:加法模型
f
(
x
)
f(x)
f(x)
- 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
- 对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M
2.1 极小化损失函数:
( β m , γ m ) = arg min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ))得到参数 β m , γ m \beta_m,\gamma_m βm,γm
2.2 更新 f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta_mb(x;\gamma_m) fm(x)=fm−1(x)+βmb(x;γm) - 得到加法模型
f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m) f(x)=fM(x)=m=1∑Mβmb(x;γm)
这样,前向分步算法将同时求解从 m = 1 m=1 m=1 到 M M M 所有参数 β m , γ m \beta_m,\gamma_m βm,γm 的优化问题简化为主次求解各个 β m , γ m \beta_m,\gamma_m βm,γm 的优化问题。
前向分步算法与AdaBoost
AdaBoost算法是前向分步算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。
参考文献
[1] 李航. 统计学习方法. 清华大学出版社. 2012