文章目录
本章内容主要讲解了Adaboost分类器的构造缘由以及其构造方法。
从2分类问题中最简单的线性分类器出发,慢慢一步步构造Adaboost二分类分类器。
线性二分类器
二分类分类器可以将样本空间分成两部分,对于某个样本 t t t来说,为了计算其分类结果,需要比较分类器预测值 f t ( x ) f_{t}(x) ft(x)与阈值 θ t \theta_{t} θt的大小。
从下面这个简单的弱分类器可以看出,阈值大小的比较其实是有两种情况的(正反两面),根据预测值和阈值大小关系的不同,可以将图中黄色的区域划分为
+
1
+1
+1类,也可以将其划分为
−
1
-1
−1类,这两种情况是可以通过
p
t
p_{t}
pt的符号调整的,
p
t
∈
{
−
1
,
+
1
}
p_{t} \in \left\{-1,+1 \right\}
pt∈{−1,+1} ,把数字带入进去看就明白了。
上面是一般的二分类器,现在考虑更加简单的「线性」分类器,就是将二分类分类器函数进一步定义为和「坐标轴平行」的形式:
Adaboost分类器
现在考虑更复杂的分类情况,某个场景下,当样本无法通过一个简单的线性分类器进行分割的时候,可以考虑将多个线性分类器进行「结合」Ensemble,如下所示。
这就是Adaboost的思想,将多个弱分类器结合成一个强分类器,在weak classifier前乘以合适的权重 α t \alpha_t αt,
最终的表达式为:
∑
t
=
1
T
α
t
h
t
(
x
)
\sum_{t=1}^T\alpha_t h_t(x)
t=1∑Tαtht(x)
决策函数为:
H
(
x
)
=
s
i
g
n
(
∑
t
=
1
T
α
t
h
t
(
x
)
)
H(x)=sign( \sum_{t=1}^T\alpha_t h_t(x))
H(x)=sign(t=1∑Tαtht(x))。
上面说到积弱成强,现在问题就是弱分类器也不是随便选的,如何找出合适的弱分类器进行组合?我先给出Adaboost分类器总体的详细步骤如下:
然后通过一个例子将整个过程进行阐述:
Initialization weight初始化
对样本点赋予合适的权重,由于刚开始我们将所有样本一视同仁,所以对所有样本点赋予相同的权重,计算公式为
D
t
=
1
(
i
)
=
(
1
n
)
D_{t=1}(i)=\left(\frac{1}{n} \right)
Dt=1(i)=(n1).
Loop: Step 1a
开始循环找出要用来组合的weak classifier,为了化简,采用和坐标轴平行的parallel-axis weak classifier,每次挑选出「分类误差最小」的那个弱分类器 h t ( ) h_t() ht(),其方法就是穷举样本空间的所有弱分类器,选出分类误差最小的那个。
当有N个样本点,且样本空间是D维时,总共的和坐标轴平行的弱分类器parallel-axis classifier数目为:
D
∗
2
∗
(
N
−
1
)
D*2*(N-1)
D∗2∗(N−1)
分类误差
ε
t
\varepsilon_t
εt的计算公式如下,直观理解就是将所有分类错误的点作为1,乘以这个点的权重
D
t
(
i
)
D_t(i)
Dt(i),除了第一轮Initilization weight初始化了权重,每轮都会对
D
t
(
i
)
D_t(i)
Dt(i)更新,计算公式如下:
ε
t
=
∑
i
=
1
n
D
t
(
i
)
∗
I
[
h
t
(
x
i
)
≠
y
i
]
\varepsilon_t=\sum_{i=1}^{n} D_t(i)*I[h_t(x_i)\neq y_i]
εt=i=1∑nDt(i)∗I[ht(xi)=yi]
I
[
h
t
(
x
i
)
≠
y
i
]
=
{
1
,
i
f
[
h
t
(
x
i
)
≠
y
i
]
0
,
o
t
h
e
r
w
i
s
e
I[h_t(x_i)\neq y_i]= \begin{cases} 1, & if[h_t(x_i) \neq y_i] \\ 0, & otherwise \end{cases}
I[ht(xi)=yi]={1,0,if[ht(xi)=yi]otherwise
Loop: Step 1b
在Step 1a中找到当前第
t
t
t轮的最小分类误差分类器以后,对应的其最小误差也被计算出来,在这里只需要记作:
ε
t
=
∑
i
=
1
n
D
t
(
i
)
∗
I
[
h
t
(
x
i
)
≠
y
i
]
\varepsilon_t=\sum_{i=1}^{n} D_t(i)*I[h_t(x_i)\neq y_i]
εt=i=1∑nDt(i)∗I[ht(xi)=yi]
然后判断这个
ε
t
\varepsilon_t
εt是否小于0.5,如果是的话则进行下一轮,继续找分类器,如果不是的话,说明连最好的也不能满足,找不到更好的分类器了,直接停止。
ε
t
<
0.5
\varepsilon_t \lt 0.5
εt<0.5
Loop: Step 2
计算刚刚选出来的弱分类器的权重
α
t
\alpha_t
αt,也就是最后要进行组合相加时乘在每个weak classifier前的系数,也可以称其为置信系数confidence value:
α
t
=
1
2
l
n
1
−
ε
t
ε
t
\alpha_t = \frac{1}{2} ln \frac{1-\varepsilon_t}{\varepsilon_t}
αt=21lnεt1−εt
Loop: Step 3
上面第 t t t轮选出来了一个分类器,接下来更新 t + 1 t+1 t+1轮,也就是下一轮中每个样本点的权重normalized weights D t + 1 ( i ) D_{t+1}(i) Dt+1(i),更新系数为 e x p ( − α t y i h t ( x i ) ) exp(-\alpha_ty_ih_t(x_i)) exp(−αtyiht(xi)),同时还要标准化,公式如下图:
直观来看,就是让当前轮中,前一轮第
t
t
t轮错误分类点的权重
D
t
(
i
)
D_{t}(i)
Dt(i)更高,正确分类点的权重
D
t
(
i
)
D_{t}(i)
Dt(i)更低,好让本轮更加关注被错误分类的点。其中
y
i
h
t
(
x
i
)
y_ih_t(x_i)
yiht(xi)直接实现了错误分类时记-1,正确分类时记1。
e
x
p
(
−
α
t
y
i
h
t
(
x
i
)
)
exp(-\alpha_ty_ih_t(x_i))
exp(−αtyiht(xi))正确分类时,幂次为负,结果小于1.
其中需要先算出标准化系数
Z
t
Z_t
Zt,相当于将所有正确分类样本和错误分类样本乘以权重的值求和算出来,这里和原先样本标签为+1,-1已经没关系了,而是看它是否和标签正确分类了。
接下来就是更新下一轮所有点的权重 D t + 1 ( i ) D_{t+1}(i) Dt+1(i)
Loop: Step 4
计算当前轮次下分类器的分类误差
C
E
t
CE_t
CEt,其意义是,到当前为止的弱分类器组合的「强分类器」,将总体样本分类错误的比例,当其为0的时候,则停止找weak classifier的循环:
C
E
t
=
s
u
m
(
∣
y
i
−
H
t
(
x
)
∣
)
/
N
CE_t=sum(|y_i-H_t(x)|)/N
CEt=sum(∣yi−Ht(x)∣)/N
H
t
(
x
)
=
s
i
g
n
(
∑
τ
=
1
τ
=
t
α
τ
h
τ
(
x
)
)
H_t(x)=sign( \sum_{\tau=1}^{\tau=t}\alpha_\tau h_\tau(x))
Ht(x)=sign(τ=1∑τ=tατhτ(x))
本例子中还需要继续训练两轮,
t
=
2
,
t
=
3
t=2,t=3
t=2,t=3:
Final Classifier
将上面3轮得到的弱分类器进行组合,得到强分类器,可以通过这个组合预测结果,大功告成。
H
(
x
)
=
s
i
g
n
(
∑
t
=
1
T
α
t
h
t
(
x
)
)
H(x)=sign( \sum_{t=1}^T\alpha_t h_t(x))
H(x)=sign(t=1∑Tαtht(x))