我只是一名搬运工,以下内容来自:刘建平Pinard:https://www.cnblogs.com/pinard/p/6111471.html
1. 背景
在SVM的前三篇里,我们优化的目标函数最终都是一个关于 α \alpha α向量的函数。而怎么极小化这个函数,求出对应的 α \alpha α向量,进而求出分离超平面我们没有讲。本篇就对优化这个关于 α \alpha α向量的函数的SMO算法做一个总结。
2. 回顾SVM优化目标函数
我们首先回顾下我们的优化目标函数:
m
i
n
⎵
α
1
2
∑
i
=
1
,
j
=
1
m
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
∑
i
=
1
m
α
i
\underbrace{ min }_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jK(x_i,x_j) - \sum\limits_{i=1}^{m}\alpha_i
α
min21i=1,j=1∑mαiαjyiyjK(xi,xj)−i=1∑mαi
s
.
t
.
  
∑
i
=
1
m
α
i
y
i
=
0
0
≤
α
i
≤
C
s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \\ 0 \leq \alpha_i \leq C
s.t.i=1∑mαiyi=00≤αi≤C
我们的解要满足的KKT条件的对偶互补条件为:
α
i
∗
(
y
i
(
w
T
x
i
+
b
)
−
1
+
ξ
i
∗
)
=
0
\alpha_{i}^{*}(y_i(w^Tx_i + b) - 1 + \xi_i^{*}) = 0
αi∗(yi(wTxi+b)−1+ξi∗)=0
根据这个KKT条件的对偶互补条件,我们有:
α
i
∗
=
0
⇒
y
i
(
w
∗
∙
ϕ
(
x
i
)
+
b
)
≥
1
\alpha_{i}^{*} = 0 \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b)\geq1
αi∗=0⇒yi(w∗∙ϕ(xi)+b)≥1
0
<
α
i
∗
<
C
⇒
y
i
(
w
∗
∙
ϕ
(
x
i
)
+
b
)
=
1
0 \lt \alpha_{i}^{*} \lt C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b)=1
0<αi∗<C⇒yi(w∗∙ϕ(xi)+b)=1
α
i
∗
=
C
⇒
y
i
(
w
∗
∙
ϕ
(
x
i
)
+
b
)
≤
1
\alpha_{i}^{*}=C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b)\leq 1
αi∗=C⇒yi(w∗∙ϕ(xi)+b)≤1
由于
w
∗
=
∑
j
=
1
m
α
j
∗
y
j
ϕ
(
x
j
)
w^{*} = \sum\limits_{j=1}^{m}\alpha_j^{*}y_j\phi(x_j)
w∗=j=1∑mαj∗yjϕ(xj),我们令
g
(
x
)
=
w
∗
∙
ϕ
(
x
)
+
b
=
∑
j
=
1
m
α
j
∗
y
j
K
(
x
,
x
j
)
+
b
∗
g(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*}
g(x)=w∗∙ϕ(x)+b=j=1∑mαj∗yjK(x,xj)+b∗,则有:
α
i
∗
=
0
⇒
y
i
g
(
x
i
)
≥
1
\alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i)\geq1
αi∗=0⇒yig(xi)≥1
0
<
α
i
∗
<
C
⇒
y
i
g
(
x
i
)
=
1
0 \lt \alpha_{i}^{*}\lt C \Rightarrow y_ig(x_i)=1
0<αi∗<C⇒yig(xi)=1
α
i
∗
=
C
⇒
y
i
g
(
x
i
)
≤
1
\alpha_{i}^{*}=C \Rightarrow y_ig(x_i)\leq 1
αi∗=C⇒yig(xi)≤1
3. SMO算法的基本思想
上面这个优化式子比较复杂,里面有m个变量组成的向量 α \alpha α需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 ∑ i = 1 m α i y i = 0 \sum\limits_{i=1}^{m}\alpha_iy_i = 0 i=1∑mαiyi=0.假如将 α 3 , α 4 , . . . , α m \alpha_3, \alpha_4, ..., \alpha_m α3,α4,...,αm固定,那么 α 1 , α 2 \alpha_1, \alpha_2 α1,α2之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。
为了后面表示方便,我们定义
K
i
j
=
ϕ
(
x
i
)
∙
ϕ
(
x
j
)
K_{ij} = \phi(x_i) \bullet \phi(x_j)
Kij=ϕ(xi)∙ϕ(xj)
由于
α
3
,
α
4
,
.
.
.
,
α
m
\alpha_3, \alpha_4, ..., \alpha_m
α3,α4,...,αm都成了常量,所有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成下式:
  
m
i
n
⎵
α
1
,
α
1
1
2
K
11
α
1
2
+
1
2
K
22
α
2
2
+
y
1
y
2
K
12
α
1
α
2
−
(
α
1
+
α
2
)
+
y
1
α
1
∑
i
=
3
m
y
i
α
i
K
i
1
+
y
2
α
2
∑
i
=
3
m
y
i
α
i
K
i
2
\;\underbrace{ min }_{\alpha_1, \alpha_1} \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_1y_2K_{12}\alpha_1 \alpha_2 -(\alpha_1 + \alpha_2)+y_1\alpha_1\sum\limits_{i=3}^{m}y_i\alpha_iK_{i1} + y_2\alpha_2\sum\limits_{i=3}^{m}y_i\alpha_iK_{i2}
α1,α1
min21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1i=3∑myiαiKi1+y2α2i=3∑myiαiKi2
s
.
t
.
    
α
1
y
1
+
α
2
y
2
=
−
∑
i
=
3
m
y
i
α
i
=
ς
0
≤
α
i
≤
C
    
i
=
1
,
2
s.t. \;\;\alpha_1y_1 + \alpha_2y_2 = -\sum\limits_{i=3}^{m}y_i\alpha_i = \varsigma\\ 0 \leq \alpha_i \leq C \;\; i =1,2
s.t.α1y1+α2y2=−i=3∑myiαi=ς0≤αi≤Ci=1,2
4. SMO算法目标函数的优化
为了求解上面含有这两个变量的目标优化问题,我们首先分析约束条件,所有的 α 1 , α 2 \alpha_1, \alpha_2 α1,α2都要满足约束条件,然后在约束条件下求最小。
根据上面的约束条件
α
1
y
1
+
α
2
y
2
=
ς
    
0
≤
α
i
≤
C
    
i
=
1
,
2
\alpha_1y_1 + \alpha_2y_2 = \varsigma\;\;0 \leq \alpha_i \leq C \;\; i =1,2
α1y1+α2y2=ς0≤αi≤Ci=1,2,又由于
y
1
,
y
2
y_1,y_2
y1,y2均只能取值1或者-1, 这样
α
1
,
α
2
\alpha_1, \alpha_2
α1,α2在[0,C]和[0,C]形成的盒子里面,并且两者的关系直线的斜率只能为1或者-1,也就是说
α
1
,
α
2
\alpha_1, \alpha_2
α1,α2的关系直线平行于[0,C]和[0,C]形成的盒子的对角线,如下图所示:
由于
α
1
,
α
2
\alpha_1, \alpha_2
α1,α2的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上仅仅是一个变量的优化问题。不妨我们假设最终是
α
2
\alpha_2
α2的优化问题。由于我们采用的是启发式的迭代法,假设我们上一轮迭代得到的解是
α
1
o
l
d
,
α
2
o
l
d
\alpha_1^{old}, \alpha_2^{old}
α1old,α2old,假设沿着约束方向
α
2
\alpha_2
α2未经剪辑的解是
α
2
n
e
w
,
u
n
c
\alpha_2^{new,unc}
α2new,unc.本轮迭代完成后的解为
α
1
n
e
w
,
α
2
n
e
w
\alpha_1^{new}, \alpha_2^{new}
α1new,α2new
由于
α
2
n
e
w
\alpha_2^{new}
α2new必须满足上图中的线段约束。假设L和H分别是上图中
α
2
n
e
w
\alpha_2^{new}
α2new所在的线段的边界。那么很显然我们有:
L
≤
α
2
n
e
w
≤
H
L \leq \alpha_2^{new} \leq H
L≤α2new≤H
而对于L和H,我们也有限制条件如果是上面左图中的情况,则
L
=
m
a
x
(
0
,
α
2
o
l
d
−
α
1
o
l
d
)
      
H
=
m
i
n
(
C
,
C
+
α
2
o
l
d
−
α
1
o
l
d
)
L = max(0, \alpha_2^{old}-\alpha_1^{old}) \;\;\;H = min(C, C+\alpha_2^{old}-\alpha_1^{old})
L=max(0,α2old−α1old)H=min(C,C+α2old−α1old)
如果是上面右图中的情况,我们有:
L
=
m
a
x
(
0
,
α
2
o
l
d
+
α
1
o
l
d
−
C
)
      
H
=
m
i
n
(
C
,
α
2
o
l
d
+
α
1
o
l
d
)
L = max(0, \alpha_2^{old}+\alpha_1^{old}-C) \;\;\; H = min(C, \alpha_2^{old}+\alpha_1^{old})
L=max(0,α2old+α1old−C)H=min(C,α2old+α1old)
也就是说,假如我们通过求导得到的
α
2
n
e
w
,
u
n
c
\alpha_2^{new,unc}
α2new,unc,则最终的
α
2
n
e
w
\alpha_2^{new}
α2new应该为:
α
2
n
e
w
=
{
H
α
2
n
e
w
,
u
n
c
>
H
α
2
n
e
w
,
u
n
c
L
≤
α
2
n
e
w
,
u
n
c
≤
H
L
α
2
n
e
w
,
u
n
c
<
L
\alpha_2^{new}= \begin{cases} H & { \alpha_2^{new,unc} \gt H}\\ \alpha_2^{new,unc} & {L \leq \alpha_2^{new,unc}\leq H}\\ L& {\alpha_2^{new,unc} \lt L} \end{cases}
α2new=⎩⎪⎨⎪⎧Hα2new,uncLα2new,unc>HL≤α2new,unc≤Hα2new,unc<L
那么如何求出 α 2 n e w , u n c \alpha_2^{new,unc} α2new,unc呢?很简单,我们只需要将目标函数对 α 2 \alpha_2 α2求偏导数即可。
首先我们整理下我们的目标函数。
为了简化叙述,我们令
E
i
=
g
(
x
i
)
−
y
i
=
∑
j
=
1
m
α
j
∗
y
j
K
(
x
i
,
x
j
)
+
b
−
y
i
E_i = g(x_i)-y_i = \sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x_i, x_j)+ b - y_i
Ei=g(xi)−yi=j=1∑mαj∗yjK(xi,xj)+b−yi
其中 g ( x ) g(x) g(x)就是我们在第一节里面的提到的 g ( x ) = w ∗ ∙ ϕ ( x ) + b = ∑ j = 1 m α j ∗ y j K ( x , x j ) + b ∗ g(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*} g(x)=w∗∙ϕ(x)+b=j=1∑mαj∗yjK(x,xj)+b∗
我们令
v
i
=
∑
j
=
3
m
y
j
α
j
K
(
x
i
,
x
j
)
=
g
(
x
i
)
−
∑
j
=
1
2
y
j
α
j
K
(
x
i
,
x
j
)
−
b
v_i = \sum\limits_{j=3}^{m}y_j\alpha_jK(x_i,x_j) = g(x_i) - \sum\limits_{j=1}^{2}y_j\alpha_jK(x_i,x_j) -b
vi=j=3∑myjαjK(xi,xj)=g(xi)−j=1∑2yjαjK(xi,xj)−b
这样我们的优化目标函数进一步简化为:
W
(
α
1
,
α
2
)
=
1
2
K
11
α
1
2
+
1
2
K
22
α
2
2
+
y
1
y
2
K
12
α
1
α
2
−
(
α
1
+
α
2
)
+
y
1
α
1
v
1
+
y
2
α
2
v
2
W(\alpha_1,\alpha_2) = \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_1y_2K_{12}\alpha_1 \alpha_2 -(\alpha_1 + \alpha_2)+y_1\alpha_1v_1 + y_2\alpha_2v_2
W(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2
由于
α
1
y
1
+
α
2
y
2
=
ς
\alpha_1y_1 + \alpha_2y_2 = \varsigma
α1y1+α2y2=ς,并且
y
i
2
=
1
y_i^2 = 1
yi2=1,可以得到
α
1
用
α
2
\alpha_1用 \alpha_2
α1用α2表达的式子为:
α
1
=
y
1
(
ς
−
α
2
y
2
)
\alpha_1 = y_1(\varsigma - \alpha_2y_2)
α1=y1(ς−α2y2)
将上式带入我们的目标优化函数,就可以消除
α
1
\alpha_1
α1,得到仅仅包含
α
2
\alpha_2
α2的式子。
W
(
α
2
)
=
1
2
K
11
(
ς
−
α
2
y
2
)
2
+
1
2
K
22
α
2
2
+
y
2
K
12
(
ς
−
α
2
y
2
)
α
2
−
(
ς
−
α
2
y
2
)
y
1
−
α
2
+
(
ς
−
α
2
y
2
)
v
1
+
y
2
α
2
v
2
W(\alpha_2) = \frac{1}{2}K_{11}(\varsigma - \alpha_2y_2)^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_2K_{12}(\varsigma- \alpha_2y_2) \alpha_2 - (\varsigma - \alpha_2y_2)y_1- \alpha_2 +(\varsigma - \alpha_2y_2)v_1 + y_2\alpha_2v_2
W(α2)=21K11(ς−α2y2)2+21K22α22+y2K12(ς−α2y2)α2−(ς−α2y2)y1−α2+(ς−α2y2)v1+y2α2v2
忙了半天,我们终于可以开始求
α
2
n
e
w
,
u
n
c
\alpha_2^{new,unc}
α2new,unc了,现在我们开始通过求偏导数来得到
α
2
n
e
w
,
u
n
c
\alpha_2^{new,unc}
α2new,unc
∂
W
∂
α
2
=
K
11
α
2
+
K
22
α
2
−
2
K
12
α
2
−
K
11
ς
y
2
+
K
12
ς
y
2
+
y
1
y
2
−
1
−
v
1
y
2
+
y
2
v
2
=
0
\frac{\partial W}{\partial \alpha_2} = K_{11}\alpha_2 + K_{22}\alpha_2 -2K_{12}\alpha_2 - K_{11}\varsigma y_2 + K_{12}\varsigma y_2 +y_1y_2 -1 -v_1y_2 +y_2v_2 = 0
∂α2∂W=K11α2+K22α2−2K12α2−K11ςy2+K12ςy2+y1y2−1−v1y2+y2v2=0
整理上式有: ( K 11 + K 22 − 2 K 12 ) α 2 = y 2 ( y 2 − y 1 + ς K 11 − ς K 12 + v 1 − v 2 ) (K_{11} +K_{22}-2K_{12})\alpha_2 = y_2(y_2-y_1 + \varsigma K_{11} -\varsigma K_{12} + v_1 - v_2) (K11+K22−2K12)α2=y2(y2−y1+ςK11−ςK12+v1−v2)
= y 2 ( y 2 − y 1 + ς K 11 − ς K 12 + ( g ( x 1 ) − ∑ j = 1 2 y j α j K 1 j − b ) − ( g ( x 2 ) − ∑ j = 1 2 y j α j K 2 j − b ) ) =y_2(y_2-y_1 + \varsigma K_{11}- \varsigma K_{12} + (g(x_1) - \sum\limits_{j=1}^{2}y_j\alpha_jK_{1j} -b ) -(g(x_2) - \sum\limits_{j=1}^{2}y_j\alpha_jK_{2j} -b)) =y2(y2−y1+ςK11−ςK12+(g(x1)−j=1∑2yjαjK1j−b)−(g(x2)−j=1∑2yjαjK2j−b))
将
ς
=
α
1
y
1
+
α
2
y
2
\varsigma = \alpha_1y_1 + \alpha_2y_2
ς=α1y1+α2y2带入上式,我们有:
(
K
11
+
K
22
−
2
K
12
)
α
2
n
e
w
,
u
n
c
=
y
2
(
(
K
11
+
K
22
−
2
K
12
)
α
2
o
l
d
y
2
+
y
2
−
y
1
+
g
(
x
1
)
−
g
(
x
2
)
)
(K_{11} +K_{22}-2K_{12})\alpha_2^{new,unc} = y_2((K_{11} +K_{22}-2K_{12})\alpha_2^{old}y_2 +y_2-y_1 +g(x_1) - g(x_2))
(K11+K22−2K12)α2new,unc=y2((K11+K22−2K12)α2oldy2+y2−y1+g(x1)−g(x2))
        
=
(
K
11
+
K
22
−
2
K
12
)
α
2
o
l
d
+
y
2
(
E
1
−
E
2
)
\;\;\;\; = (K_{11} +K_{22}-2K_{12})\alpha_2^{old} + y_2(E_1-E_2)
=(K11+K22−2K12)α2old+y2(E1−E2)
我们终于得到了
α
2
n
e
w
,
u
n
c
\alpha_2^{new,unc}
α2new,unc的表达式:
α
2
n
e
w
,
u
n
c
=
α
2
o
l
d
+
y
2
(
E
1
−
E
2
)
K
11
+
K
22
−
2
K
12
\alpha_2^{new,unc} = \alpha_2^{old} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12}}
α2new,unc=α2old+K11+K22−2K12y2(E1−E2)
利用上面讲到的 α 2 n e w , u n c \alpha_2^{new,unc} α2new,unc和 α 2 n e w \alpha_2^{new} α2new的关系式,我们就可以得到我们新的 α 2 n e w \alpha_2^{new} α2new了。利用 α 2 n e w \alpha_2^{new} α2new和 α 1 n e w \alpha_1^{new} α1new的线性关系,我们也可以得到新的 α 1 n e w \alpha_1^{new} α1new。
5. SMO算法两个变量的选择
SMO算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?
5.1 第一个变量的选择
SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点。对于每个样本点,要满足的KKT条件我们在第一节已经讲到了:
α
i
∗
=
0
⇒
y
i
g
(
x
i
)
≥
1
\alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i)\geq1
αi∗=0⇒yig(xi)≥1
0
<
α
i
∗
<
C
⇒
y
i
g
(
x
i
)
=
1
0 \lt \alpha_{i}^{*}\lt C \Rightarrow y_ig(x_i)=1
0<αi∗<C⇒yig(xi)=1
α
i
∗
=
C
⇒
y
i
g
(
x
i
)
≤
1
\alpha_{i}^{*}=C \Rightarrow y_ig(x_i)\leq 1
αi∗=C⇒yig(xi)≤1
一般来说,我们首先选择违反 0 < α i ∗ < C ⇒ y i g ( x i ) = 1 0 \lt \alpha_{i}^{*}\lt C \Rightarrow y_ig(x_i)=1 0<αi∗<C⇒yig(xi)=1这个条件的点。如果这些支持向量都满足KKT条件,再选择违反 α i ∗ = 0 ⇒ y i g ( x i ) ≥ 1 \alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i)\geq1 αi∗=0⇒yig(xi)≥1和 α i ∗ = C ⇒ y i g ( x i ) ≤ 1 \alpha_{i}^{*}=C \Rightarrow y_ig(x_i)\leq 1 αi∗=C⇒yig(xi)≤1的点。
5.2 第二个变量的选择
SMO算法称选择第二个变量为内层循环,假设我们在外层循环已经找到了 α 1 \alpha_1 α1, 第二个变量 α 2 \alpha_2 α2的选择标准是让 ∣ E 1 − E 2 ∣ |E1-E2| ∣E1−E2∣有足够大的变化。由于 α 1 \alpha_1 α1定了的时候, E 1 E_1 E1也确定了,所以要想 ∣ E 1 − E 2 ∣ |E1-E2| ∣E1−E2∣最大,只需要在 E 1 E_1 E1为正时,选择最小的 E i E_i Ei作为 E 2 E_2 E2, 在 E 1 E_1 E1为负时,选择最大的 E i E_i Ei作为 E 2 E_2 E2,可以将所有的 E i E_i Ei保存下来加快迭代。
如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做 α 2 \alpha_2 α2,直到目标函数有足够的下降, 如果所有的支持向量做 α 2 \alpha_2 α2都不能让目标函数有足够的下降,可以跳出循环,重新选择 α 1 \alpha_1 α1。
5.3 计算阈值b和差值Ei
在每次完成两个变量的优化之后,需要重新计算阈值b。当
0
<
α
1
n
e
w
<
C
0 \lt \alpha_{1}^{new}\lt C
0<α1new<C时,我们有
y
1
−
∑
i
=
1
m
α
i
y
i
K
i
1
−
b
1
=
0
y_1 - \sum\limits_{i=1}^{m}\alpha_iy_iK_{i1} -b_1 = 0
y1−i=1∑mαiyiKi1−b1=0
于是新的
b
1
n
e
w
b_1^{new}
b1new为:
b
1
n
e
w
=
y
1
−
∑
i
=
3
m
α
i
y
i
K
i
1
−
α
1
n
e
w
y
1
K
11
−
α
2
n
e
w
y
2
K
21
b_1^{new} = y_1 - \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1}- \alpha_{1}^{new}y_1K_{11} - \alpha_{2}^{new}y_2K_{21}
b1new=y1−i=3∑mαiyiKi1−α1newy1K11−α2newy2K21
计算出
E
1
E_1
E1为:
E
1
=
g
(
x
1
)
−
y
1
=
∑
i
=
3
m
α
i
y
i
K
i
1
+
α
1
o
l
d
y
1
K
11
+
α
2
o
l
d
y
2
K
21
+
b
o
l
d
−
y
1
E_1 = g(x_1) - y_1 = \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1} + \alpha_{1}^{old}y_1K_{11} + \alpha_{2}^{old}y_2K_{21} + b^{old} -y_1
E1=g(x1)−y1=i=3∑mαiyiKi1+α1oldy1K11+α2oldy2K21+bold−y1
可以看到上两式都有
y
1
−
∑
i
=
3
m
α
i
y
i
K
i
1
y_1 - \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1}
y1−i=3∑mαiyiKi1,因此可以将
b
1
n
e
w
b_1^{new}
b1new用
E
1
E_1
E1表示为:
b
1
n
e
w
=
−
E
1
−
y
1
K
11
(
α
1
n
e
w
−
α
1
o
l
d
)
−
y
2
K
21
(
α
2
n
e
w
−
α
2
o
l
d
)
+
b
o
l
d
b_1^{new} = -E_1 -y_1K_{11}(\alpha_{1}^{new} - \alpha_{1}^{old}) -y_2K_{21}(\alpha_{2}^{new} - \alpha_{2}^{old}) + b^{old}
b1new=−E1−y1K11(α1new−α1old)−y2K21(α2new−α2old)+bold
同样的,如果
0
<
α
2
n
e
w
<
C
0 \lt \alpha_{2}^{new}\lt C
0<α2new<C, 那么有:
b
2
n
e
w
=
−
E
2
−
y
1
K
12
(
α
1
n
e
w
−
α
1
o
l
d
)
−
y
2
K
22
(
α
2
n
e
w
−
α
2
o
l
d
)
+
b
o
l
d
b_2^{new} = -E_2 -y_1K_{12}(\alpha_{1}^{new} - \alpha_{1}^{old}) -y_2K_{22}(\alpha_{2}^{new} - \alpha_{2}^{old}) + b^{old}
b2new=−E2−y1K12(α1new−α1old)−y2K22(α2new−α2old)+bold
最终的
b
n
e
w
b^{new}
bnew为:
b
n
e
w
=
b
1
n
e
w
+
b
2
n
e
w
2
b^{new} = \frac{b_1^{new} + b_2^{new}}{2}
bnew=2b1new+b2new
得到了
b
n
e
w
b^{new}
bnew我们需要更新
E
i
E_i
Ei:
E
i
=
∑
S
y
j
α
j
K
(
x
i
,
x
j
)
+
b
n
e
w
−
y
i
E_i = \sum\limits_{S}y_j\alpha_jK(x_i,x_j) + b^{new} -y_i
Ei=S∑yjαjK(xi,xj)+bnew−yi
其中,S是所有支持向量 x j x_j xj的集合。
好了,SMO算法基本讲完了,我们来归纳下SMO算法。
6. SMO算法总结
输入是m个样本
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
,
{(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}
(x1,y1),(x2,y2),...,(xm,ym),,其中x为n维特征向量。y为二元输出,值为1,或者-1.精度e。
输出是近似解
α
\alpha
α。
1 ) 取初值
α
0
=
0
,
k
=
0
\alpha^{0} = 0, k =0
α0=0,k=0
2 ) 按照4.1节的方法选择
α
1
k
\alpha_1^k
α1k,接着按照4.2节的方法选择
α
2
k
\alpha_2^k
α2k,求出新的
α
2
n
e
w
,
u
n
c
\alpha_2^{new,unc}
α2new,unc。
α
2
n
e
w
,
u
n
c
=
α
2
k
+
y
2
(
E
1
−
E
2
)
K
11
+
K
22
−
2
K
12
\alpha_2^{new,unc} = \alpha_2^{k} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12}}
α2new,unc=α2k+K11+K22−2K12y2(E1−E2)
3 ) 按照下式求出
α
2
k
+
1
\alpha_2^{k+1}
α2k+1
α
2
k
+
1
=
{
H
L
≤
α
2
n
e
w
,
u
n
c
>
H
α
2
n
e
w
,
u
n
c
L
≤
α
2
n
e
w
,
u
n
c
≤
H
L
α
2
n
e
w
,
u
n
c
<
L
\alpha_2^{k+1}= \begin{cases} H& {L \leq \alpha_2^{new,unc}\gt H}\\ \alpha_2^{new,unc}& {L \leq \alpha_2^{new,unc}\leq H}\\ L& {\alpha_2^{new,unc} \lt L} \end{cases}
α2k+1=⎩⎪⎨⎪⎧Hα2new,uncLL≤α2new,unc>HL≤α2new,unc≤Hα2new,unc<L
4 ) 利用
α
2
k
+
1
\alpha_2^{k+1}
α2k+1和
α
1
k
+
1
\alpha_1^{k+1}
α1k+1的关系求出
α
1
k
+
1
\alpha_1^{k+1}
α1k+1
5 ) 按照4.3节的方法计算
b
k
+
1
b^{k+1}
bk+1和
E
i
E_i
Ei
6 ) 在精度e范围内检查是否满足如下的终止条件:
∑
i
=
1
m
α
i
y
i
=
0
\sum\limits_{i=1}^{m}\alpha_iy_i = 0
i=1∑mαiyi=0
0
≤
α
i
≤
C
,
i
=
1
,
2...
m
0 \leq \alpha_i \leq C, i =1,2...m
0≤αi≤C,i=1,2...m
α
i
k
+
1
=
0
⇒
y
i
g
(
x
i
)
≥
1
\alpha_{i}^{k+1} = 0 \Rightarrow y_ig(x_i)\geq1
αik+1=0⇒yig(xi)≥1
0
<
α
i
k
+
1
<
C
⇒
y
i
g
(
x
i
)
=
1
0 \lt\alpha_{i}^{k+1} \lt C \Rightarrow y_ig(x_i)=1
0<αik+1<C⇒yig(xi)=1
α
i
k
+
1
=
C
⇒
y
i
g
(
x
i
)
≤
1
\alpha_{i}^{k+1}=C \Rightarrow y_ig(x_i)\leq 1
αik+1=C⇒yig(xi)≤1
7 ) 如果满足则结束,返回 α k + 1 \alpha^{k+1} αk+1,否则转到步骤 2 ) 。
SMO算法终于写完了,这块在学的时候是非常痛苦的,不过弄明白就豁然开朗了。希望大家也是一样。写完这一篇, SVM系列就只剩下支持向量回归了。
(欢迎转载,转载请注明出处 刘建平Pinard:https://www.cnblogs.com/pinard/p/6111471.html)