机器学习——提升方法Adaboost算法
前言
注:该文大部分来自于李航的《统计学习》,此篇可理解为个人笔记。
提升方法的基本思路
简单来说就是“三各臭皮匠顶一个诸葛亮”的道理。
对于分类任务而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比精确非分类规则(强分类器)容易的多。提升方法就是从弱学习算法出发,反复学习,得到一些列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器。
Adaboost算法
先给出算法的定义,再给出实例,最后给出代码实现。
假设给定一个二分类的训练数据集,共有N个样本, 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 ∈ χ ⊑ R n x_{i}\in \chi \sqsubseteq R^{n} xi∈χ⊑Rn,标记为 y i ∈ γ ⊑ { − 1 , + 1 } y_{i}\in \gamma \sqsubseteq \{-1,+1\} yi∈γ⊑{−1,+1}, χ 是 实 例 空 间 , γ 是 标 记 集 合 \chi 是实例空间,\gamma 是标记集合 χ是实例空间,γ是标记集合。
Adaboost利用以下算法,训练数据中学习一些列弱分类器或基本分类器,并将这些弱分类器线性组合成为一个强分类器。
算法:
输入:孙联数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,
其
中
x
i
∈
χ
⊑
R
n
T=\{(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N})\},其中x_{i}\in \chi \sqsubseteq R^{n}
T={(x1,y1),(x2,y2),...,(xN,yN)},其中xi∈χ⊑Rn,标记为
y
i
∈
γ
⊑
{
−
1
,
+
1
}
y_{i}\in \gamma \sqsubseteq \{-1,+1\}
yi∈γ⊑{−1,+1};弱学习算法(感知机、树等)
输出:最终分类器G(x)
(1)初始化训练数据的权值分布
D
1
=
(
w
11
,
.
.
.
,
w
1
i
,
.
.
.
,
w
1
N
)
,
w
1
i
=
1
N
,
i
=
1
,
2
,
.
.
.
,
N
(1)
D_{1}=(w_{11},...,w_{1i},...,w_{1N}),w_{1i}=\frac{1}{N},i = 1,2,...,N\tag{1}
D1=(w11,...,w1i,...,w1N),w1i=N1,i=1,2,...,N(1)
(2)对于m= 1,2,…,M
------(a)使用具有权值分布
D
m
D_{m}
Dm的训练数据集学习,得到基本分类器
G
m
(
x
)
:
χ
→
−
1
,
+
1
G_{m}(x):\chi \rightarrow{-1,+1}
Gm(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
)
)
(2)
e_{m}=P(G_{m}(x_{i})\neq y_{i})=\sum_{i=1}^{N}w_{mi}I(G_{m}(x_{i}\neq y_{i}))\tag{2}
em=P(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi=yi))(2)
注:
∑
i
=
1
N
w
m
i
=
1
\sum_{i=1}^{N}w_{mi}=1
∑i=1Nwmi=1
------©计算G_{m}的系数
α
m
=
1
2
l
o
g
1
−
e
m
e
m
(3)
\alpha_{m}=\frac{1}{2}log\frac{1-e_{m}}{e_{m}}\tag{3}
αm=21logem1−em(3)(log为自然对数)
------(d)更新训练数据集的权值分布
D
m
+
1
=
(
w
m
+
1
,
1
,
.
.
.
,
w
m
+
1
,
i
,
.
.
.
w
m
+
1
,
N
)
D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...w_{m+1,N})
Dm+1=(wm+1,1,...,wm+1,i,...wm+1,N)
w
m
+
1
,
i
=
w
m
i
Z
m
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
,
i
=
1
,
2
,
.
.
.
,
N
(4)
w_{m+1,i} = \frac{w_{mi}}{Z_{m}}exp(-\alpha_{m}y_{i}G_{m}(x_{i})),i= 1,2,...,N\tag{4}
wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,...,N(4)
这里
Z
m
Z_{m}
Zm是规范化因子
Z
m
=
∑
i
=
1
N
w
m
i
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
(5)
Z_{m}=\sum_{i=1}^{N}w_{mi}exp(-\alpha _{m}y_{i}G_{m}(x_{i}))\tag{5}
Zm=i=1∑Nwmiexp(−αmyiGm(xi))(5)
它使
D
m
+
1
D_{m+1}
Dm+1成为一个概率分布。
------(e)构建基分类器的线性组合
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
(6)
f(x) = \sum_{m=1}^{M}\alpha _{m}G_{m}(x)\tag{6}
f(x)=m=1∑MαmGm(x)(6)
得到最终分类器
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
(7)
G(x)=sign(f(x))=sign(\sum_{m=1}^{M}\alpha _{m}G_{m}(x))\tag{7}
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))(7)
------------------------------------------------------------------------------------------------------------------------------------
下面是推导过程:
构建的线性组合分类器为:
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
f(x)=\sum_{m=1}^{M}\alpha_{m}G_{m}(x)
f(x)=m=1∑MαmGm(x)
最终分类器是在线性组合的基础上进行Sign函数转换:
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[\sum_{m=1}^{M}\alpha_{m}G_{m}(x)]
G(x)=sign(f(x))=sign[m=1∑MαmGm(x)]
G这个分类器在训练的过程中,是为了让误差率最小,所以可以认为G越小其实就是误差率越小
G
m
∗
=
1
n
∑
i
=
1
n
w
m
i
−
I
(
y
i
≠
G
m
)
,
ε
m
=
P
(
G
m
(
x
)
≠
y
)
=
1
n
∑
i
=
1
n
w
m
i
−
I
(
y
i
≠
G
m
(
x
i
)
)
G^{*}_{m}=\frac{1}{n}\sum_{i=1}^{n}\overset{-}{w_{mi}}I(y_{i} \neq G_{m}),\varepsilon_{m}=P(G_{m}(x)\neq y)=\frac{1}{n}\sum_{i=1}^{n}\overset{-}{w_{mi}}I(y_{i} \neq G_{m}(x_{i}))
Gm∗=n1i=1∑nwmi−I(yi=Gm),εm=P(Gm(x)=y)=n1i=1∑nwmi−I(yi=Gm(xi))
损失函数:
l
o
s
s
=
1
n
∑
i
=
1
n
I
(
G
(
x
i
)
≠
y
i
)
)
loss = \frac{1}{n}\sum_{i=1}^{n}I(G(x_{i})\neq y_{i}))
loss=n1i=1∑nI(G(xi)=yi))
l
o
s
s
=
1
n
∑
i
=
1
n
I
(
G
(
x
i
)
≠
y
i
)
≤
1
n
∑
i
=
1
n
e
−
y
i
f
(
x
i
)
(8)
loss = \frac{1}{n}\sum_{i=1}^{n}I(G(x_{i})\neq y_{i}) \leq \frac {1}{n}\sum_{i=1}^{n}e^{-y_{i}f(x_{i})}\tag{8}
loss=n1i=1∑nI(G(xi)=yi)≤n1i=1∑ne−yif(xi)(8)
假设第k-1轮的强学习器:
f
k
−
1
(
x
)
=
∑
j
=
1
k
−
1
α
j
G
j
(
x
)
f_{k-1}(x)=\sum_{j=1}^{k-1}\alpha_{j}G_{j}(x)
fk−1(x)=j=1∑k−1αjGj(x)
第k轮的强学习器:
f
k
(
x
)
=
∑
j
=
1
k
α
j
G
j
(
x
)
,
f
k
(
x
)
=
f
k
−
1
(
x
)
+
α
k
G
k
(
x
)
f_{k}(x)=\sum_{j=1}^{k}\alpha _{j}G_{j}(x),f_{k}(x)=f_{k-1}(x)+\alpha_{k}G_{k}(x)
fk(x)=j=1∑kαjGj(x),fk(x)=fk−1(x)+αkGk(x)
将上式带入到损失函数(8)中:
l
o
s
s
(
α
m
,
G
(
m
(
x
)
)
)
=
1
n
∑
i
=
1
n
e
−
y
i
(
f
m
−
1
(
x
)
+
α
m
G
m
(
x
)
)
loss(\alpha_{m},G(_{m}(x))) = \frac{1}{n}\sum_{i=1}^{n}e^{-y_{i}(f_{m-1}(x)+\alpha_{m}G_{m}(x))}
loss(αm,G(m(x)))=n1i=1∑ne−yi(fm−1(x)+αmGm(x))
那么此时的目标函数为:
a
r
g
m
i
n
1
n
∑
i
=
1
n
e
−
y
i
(
f
m
−
1
(
x
i
)
+
α
m
G
m
(
x
)
)
\underset{min}{arg}\frac{1}{n}\sum_{i=1}^{n}e^{-y_{i}(f_{m-1}(x_{i})+\alpha_{m}G_{m}(x))}
minargn1i=1∑ne−yi(fm−1(xi)+αmGm(x))
化简上式:
a
r
g
m
i
n
1
n
∑
i
=
1
n
e
−
y
i
(
f
m
−
1
(
x
i
)
+
α
m
G
m
(
x
)
)
=
a
r
g
m
i
n
1
n
∑
i
=
1
n
e
−
y
i
f
m
−
1
∗
e
−
y
i
α
m
G
m
(
x
)
=
a
r
g
m
i
n
1
n
∑
i
=
1
n
w
m
i
∗
e
−
y
i
α
m
G
m
(
x
)
,
w
m
i
=
e
−
y
i
f
m
−
1
\underset{min}{arg}\frac{1}{n}\sum_{i=1}^{n}e^{-y_{i}(f_{m-1}(x_{i})+\alpha_{m}G_{m}(x))}\\=\underset{min}{arg}\frac{1}{n}\sum_{i=1}^{n}e^{-y_{i}f_{m-1}}*e^{-y_{i}\alpha_{m}G_{m}(x)}\\=\underset{min}{arg}\frac{1}{n}\sum_{i=1}^{n}w_{mi}*e^{-y_{i}\alpha_{m}G_{m}(x)},w_{mi} = e^{-y_{i}f_{m-1}}
minargn1i=1∑ne−yi(fm−1(xi)+αmGm(x))=minargn1i=1∑ne−yifm−1∗e−yiαmGm(x)=minargn1i=1∑nwmi∗e−yiαmGm(x),wmi=e−yifm−1
这里把目标函数简记为:
J
(
α
)
=
w
−
e
−
y
α
G
=
1
n
∑
y
i
=
G
m
(
x
i
)
w
−
e
−
α
+
1
n
∑
y
i
≠
G
m
(
x
i
)
w
−
e
α
+
1
n
∑
y
i
≠
G
m
(
x
i
)
w
−
e
−
α
−
1
n
∑
y
i
≠
G
m
(
x
i
)
w
−
e
−
α
=
1
n
∑
i
=
1
n
w
−
e
−
α
+
1
n
ε
e
α
−
1
n
ε
e
−
α
=
1
n
(
∑
i
=
1
n
w
−
e
−
α
+
ε
e
α
−
ε
e
−
α
)
J(\alpha)=\overset{-}{w}e^{-y\alpha G}=\frac{1}{n}\sum_{y_{i}=G_{m}(x_{i})} \overset{-}{w}e^{-\alpha}+\frac{1}{n}\sum_{y_{i}\neq G_{m}(x_{i})} \overset{-}{w}e^{\alpha}\\+\frac{1}{n}\sum_{y_{i}\neq G_{m}(x_{i})} \overset{-}{w}e^{-\alpha}-\frac{1}{n}\sum_{y_{i}\neq G_{m}(x_{i})} \overset{-}{w}e^{-\alpha}\\=\frac{1}{n}\sum_{i=1}^{n}\overset{-}{w}e^{-\alpha}+\frac{1}{n}\varepsilon e^{\alpha}-\frac{1}{n}\varepsilon e^{-\alpha}\\=\frac{1}{n}(\sum_{i=1}^{n}\overset{-}{w}e^{-\alpha} + \varepsilon e^{\alpha} - \varepsilon e^{-\alpha})
J(α)=w−e−yαG=n1yi=Gm(xi)∑w−e−α+n1yi=Gm(xi)∑w−eα+n1yi=Gm(xi)∑w−e−α−n1yi=Gm(xi)∑w−e−α=n1i=1∑nw−e−α+n1εeα−n1εe−α=n1(i=1∑nw−e−α+εeα−εe−α)
使用梯度下降来求解上式的最小值:
∂
J
(
α
)
∂
α
=
1
n
(
−
∑
i
=
1
n
w
−
e
−
α
+
ε
e
α
+
ε
e
−
α
)
=
0
\frac{\partial J(\alpha)}{\partial \alpha}=\frac{1}{n}(-\sum_{i=1}^{n}\overset{-}{w}e^{-\alpha}+\varepsilon e^{\alpha}+\varepsilon e^{-\alpha})=0
∂α∂J(α)=n1(−i=1∑nw−e−α+εeα+εe−α)=0
解上式:
α
m
∗
=
1
2
l
n
(
1
−
e
m
e
m
)
\alpha^{*}_{m}=\frac{1}{2}ln(\frac{1-e_{m}}{e_{m}})
αm∗=21ln(em1−em)
证毕
---------------------------------------------------------------------------------------------------------
上述的Adaboost算法应掌握以下几点:
- 在步骤1中假设数据集具有均匀的权值分布,是为了保证在第一步能够在原始数据上学习基本分类器 G 1 ( x ) G_{1}(x) G1(x)。
- Adaboost算法中的c步计算基分类器 G m G_{m} Gm的系数 α m \alpha_{m} αm。 α m \alpha_{m} αm表示 G m ( x ) G_{m}(x) Gm(x)在最终分类器中的重要性。当 e m ≤ 1 2 e_{m}\leq \frac{1}{2} em≤21时, α m ≥ 0 \alpha_{m}\geq0 αm≥0,并且 α m \alpha_{m} αm随着 e m e_{m} em的减小而增大,所以分类误差越小的基分类器在最终分类器中的作用越大。
- 更新训练数据的权值分布为下一轮做准备,式(4)可以写成:
w m + 1 , 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 w_{m+1,i}=\left\{\begin{matrix} \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{matrix}\right. wm+1,i={ZMwmie−αmZMwmieαmGm(xi)=yiGm(xi)=yi
由此可知,被基分类器 G m ( x ) G_{m}(x) Gm(x)误分类样本的权重值得以扩大,而被正确分类样本的权值得以缩小。两相比较,误分类样本的权值得以扩大 e 2 α m = e m 1 − e m e^{2\alpha_{m}}=\frac{e_{m}}{1-e_{m}} e2αm=1−emem倍。因此误分类样本在下一轮学习中起更大的作用。不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用
Adaboost算法三大特点总结:
- 分类误差率越小的基分类器在最终分类器中的作用越大
- 被误分类的样本会得到更大的权重
- 基分类器线性组合构建最终的分类器
Adaboost例子
由于李航的《统计学习方法》上的示例已经是很详细了,这里直接截图。