AdaBoost概述
AdaBoost训练过程
建模
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
=
α
1
G
1
(
x
)
+
⋯
+
α
m
G
m
(
x
)
+
⋯
+
α
M
G
m
(
x
)
\begin{aligned} f(x) &=\sum_{m=1}^{M} \alpha_{m} G_{m}(x) \\ &=\alpha_{1} G_{1}(x)+\cdots+\alpha_{m} G_{m}(x)+\cdots+\alpha_{M} G_{m}(x) \end{aligned}
f(x)=m=1∑MαmGm(x)=α1G1(x)+⋯+αmGm(x)+⋯+αMGm(x)
G为基分类器, M为基分类器个数,阿尔法是基分类器的权重
初始化参数
D
1
=
(
w
11
,
⋯
,
w
1
i
,
⋯
,
w
1
N
)
,
w
1
i
=
1
N
,
i
=
1
,
2
,
⋯
,
N
D_{1}=\left(w_{11}, \cdots, w_{1 i}, \cdots, w_{1 N}\right), \quad w_{1 i}=\frac{1}{N}, \quad i=1,2, \cdots, N
D1=(w11,⋯,w1i,⋯,w1N),w1i=N1,i=1,2,⋯,N
这是一个基分类器的参数,w参数是数据集中每个数据的权重,假设数据集中有N个参数,初始化每个数据的权重为1/N,每个数据的权重初始都相同。
训练当前基分类器
1.首先要有二分类数据集
2.因为提升算法是串行训练,先训练第一个基分类器时,只需要初始化数据的参数,在训练完后才能计算第一个基分类器的权重和对要输入下一个基分类器的数据做出权重改变,然后再训练第二个基分类器,如此循环。
权重的计算与更新
1.首先计算基分类器的分类误差率em
e
m
=
∑
i
=
1
N
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
=
∑
G
m
(
x
i
)
≠
y
i
w
m
i
e_{m}=\sum_{i=1}^{N} P\left(G_{m}\left(x_{i}\right) \neq y_{i}\right)=\sum_{i=1}^{N} w_{m i} I\left(G_{m}\left(x_{i}\right) \neq y_{i}\right)=\sum_{G_{m}\left(x_{i}\right) \neq y_{i}} w_{m i}
em=∑i=1NP(Gm(xi)=yi)=∑i=1NwmiI(Gm(xi)=yi)=∑Gm(xi)=yiwmi
分类误差率是所有基分类器判断错误的样本的权重之和
2.根据分类误差率计算基分类器的权重系数阿尔法
α
m
=
1
2
log
1
−
e
m
e
m
\alpha_{m}=\frac{1}{2} \log \frac{1-e_{m}}{e_{m}}
αm=21logem1−em
3.更新训练数据的权值
w m , i = w m − 1 , i Z m − 1 exp ( − α m − 1 y i G m − 1 ( x i ) ) , i = 1 , 2 , ⋯ , N w_{m, i}=\frac{w_{m-1, i}}{Z_{m-1}} \exp \left(-\alpha_{m-1} y_{i} G_{m-1}\left(x_{i}\right)\right), \quad i=1,2, \cdots, N wm,i=Zm−1wm−1,iexp(−αm−1yiGm−1(xi)),i=1,2,⋯,N
Zm是规范化因子:
Z m − 1 = ∑ i = 1 N w m − 1 , i exp ( − α m − 1 y i G m − 1 ( x i ) ) Z_{m-1}=\sum_{i=1}^{N} w_{m-1, i} \exp \left(-\alpha_{m-1} y_{i} G_{m-1}\left(x_{i}\right)\right) Zm−1=∑i=1Nwm−1,iexp(−αm−1yiGm−1(xi))
它使D成为一个概率分布,即值的范围在0~1之间
得到最终分类器
G ( x ) = sign ( f ( x ) ) = sign ( ∑ m = 1 M α m G m ( x ) ) \begin{aligned} G(x) &=\operatorname{sign}(f(x)) \\ &=\operatorname{sign}\left(\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right) \end{aligned} G(x)=sign(f(x))=sign(m=1∑MαmGm(x))