1. 引言
提升算法大多都是基于这样的一个思想;对于一个复杂的任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独判断的好。实际上就是 三个臭皮匠,顶个诸葛亮的道理。
AdaBoost算法是提升算法中具有代表性的一种,它通过改变样本的权重,学习多个分类器,并将这些分类器线性组合,提高分类器的性能。
2. 算法
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
.
.
.
(
x
3
,
y
3
)
}
T=\{(x_1,y_1),(x_2,y_2)...(x_3,y_3)\}
T={(x1,y1),(x2,y2)...(x3,y3)},其中
x
1
ϵ
X
ϵ
R
n
x_1\epsilon X\epsilon R_n
x1ϵXϵRn,
y
i
ϵ
Y
=
{
−
1
,
+
1
}
y_i\epsilon Y=\{-1,+1\}
yiϵY={−1,+1},弱学习方法;
输出:最终分类器
G
(
x
)
G(x)
G(x)
(1)初始化训练数据的权值分布
D
1
=
(
w
l
l
,
.
.
.
,
w
l
i
,
.
.
.
,
w
l
N
)
,
w
l
i
=
1
n
,
i
=
1
,
2
,
.
.
.
,
N
D_1=(w_{ll}, ... ,w_li,...,w_{lN}),w_{li}= \frac{1}{n},i=1,2,...,N
D1=(wll,...,wli,...,wlN),wli=n1,i=1,2,...,N
(2)对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M
(a)使用具有权值分布
D
m
D_m
Dm的训练数据集学习,得到基分类器
G
m
(
x
)
:
x
→
{
−
1
,
+
1
}
G_m(x):x \overrightarrow{}\{-1,+1\}
Gm(x):x{−1,+1}
(b)计算
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}^n w_{mi}I(G_m(x_i)\neq y_i)\quad
em=P(Gm(xi)̸=yi)=i=1∑nwmiI(Gm(xi)̸=yi)
©计算
G
m
(
x
)
G_m(x)
Gm(x)的系数
a
m
=
1
2
l
o
g
(
1
−
e
m
)
e
m
,
这
里
的
对
数
是
自
然
对
数
a_m = \frac 12log\frac{(1-e_m)}{e_m}, 这里的对数是自然对数
am=21logem(1−em),这里的对数是自然对数
(d)更新训练数据集权值分布
D
m
+
1
=
(
w
m
+
l
,
l
,
.
.
.
,
w
m
+
l
,
i
.
.
.
,
w
m
+
l
,
N
)
D_{m+1}=(w_{m+l,l},...,w_{m+l,i}...,w_{m+l,N})
Dm+1=(wm+l,l,...,wm+l,i...,wm+l,N)
w
m
+
l
,
i
=
w
m
i
Z
m
e
x
p
(
−
a
m
y
i
G
m
(
x
i
)
)
,
i
=
1
,
2...
N
w_{m+l,i}=\frac {w_mi}{Z_m}exp(-a_m y_iG_m(x_i)),i=1,2...N
wm+l,i=Zmwmiexp(−amyiGm(xi)),i=1,2...N这里
Z
m
Z_m
Zm是规范化因子
Z
m
=
∑
i
=
1
N
w
m
i
e
x
p
(
−
a
m
y
i
G
m
(
x
i
)
)
Z_m=\sum_{i=1}^Nw_{mi}exp(-a_m y_iG_m(x_i))
Zm=i=1∑Nwmiexp(−amyiGm(xi))
他使
D
m
+
1
D_{m+1}
Dm+1成为一个概率分布
(3)构建基本分类器线性组合
f
(
x
)
=
∑
m
=
1
M
a
m
G
m
(
x
)
f(x) = \sum_{m=1}^{M}a_mG_m(x)
f(x)=m=1∑MamGm(x)
得到最终分类器
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
a
m
G
m
(
x
)
)
G(x)=sign(f(x))=sign( \sum_{m=1}^{M} a_mG_m(x))
G(x)=sign(f(x))=sign(m=1∑MamGm(x))
3. 算法描述
步骤(1):假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中的作用相同,这一假设保证第一步能够在原始数据上学习基本分类器
G
1
(
x
)
G_1(x)
G1(x).
步骤(2):AdaBoost反复学习基本分类器,在每一轮
m
=
1
,
2
,
3..
,
M
m=1,2,3..,M
m=1,2,3..,M顺次的执行下列操作:
(a)使用当前分布
D
m
D_m
Dm加权的训练数据集,学习基本分类器
G
m
(
x
)
G_m(x)
Gm(x)
(b)计算基本分类器
G
m
(
x
)
G_m(x)
Gm(x)在加权训练数据集上的分类误差率:
e
m
=
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
G
m
(
x
i
)
≠
y
i
w
m
i
e_m=P(G_m(x_i)\neq y_i)=\sum_{G_m(x_i)\neq y_i} w_{mi}
em=P(Gm(xi)̸=yi)=Gm(xi)̸=yi∑wmi
这里,
w
m
i
w_{mi}
wmi表示第m轮中第i个实例的权值,
∑
i
=
1
N
w
m
i
=
1
\sum_{i=1} ^ {N}w_{mi}=1
∑i=1Nwmi=1.这表明,
G
m
(
x
)
G_m(x)
Gm(x)在加权的训练数据集上的分类误差率是被
G
m
(
x
)
G_m(x)
Gm(x)误分类样本的权值之和,由此可以看出数据权值分布
D
m
D_m
Dm与基本分类器
G
(
x
)
G_(x)
G(x)的分类误差率的关系。
©计算基本分类器
G
m
(
x
)
G_m(x)
Gm(x)的系数
a
m
a_m
am.
a
m
a_m
am表示
G
m
(
x
)
G_m(x)
Gm(x)在最终分类器中的重要性。
(d)更新训练数据的权值分布为下一轮做准备
步骤(3):线性组合
f
(
x
)
f(x)
f(x)实现M个基本分类器的加权表决。系数
a
m
a_m
am表示了基本分类器
G
m
(
x
)
G_m(x)
Gm(x)的重要性,这里,所有的
a
m
a_m
am之和并不唯一。
f
(
x
)
f(x)
f(x)的符号决定实例x的类,
f
(
x
)
f(x)
f(x)的绝对值表示分类的确信度。利用基本分类器的线性组合构建最终分类器是AdaBoost的另一特点。
4. 小结
Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
参考文献:统计学习-李航