支持向量机SVM——SMO算法
0.回顾
接上一篇博客支持向量机SVM(4)——核函数
回顾前面所讲的,我们现在的优化问题变成了:
{
m
i
n
λ
1
2
∑
i
=
1
N
∑
j
=
1
N
λ
i
λ
j
y
i
y
j
K
(
x
i
,
x
j
)
−
∑
i
=
1
N
λ
i
s
.
t
.
0
≤
λ
i
≤
C
∑
i
=
1
N
λ
i
y
i
=
0
,
i
=
1
,
2
,
.
.
.
,
N
\begin{cases}min_{\lambda}\;\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\lambda_i\\ s.t. \quad 0\leq\lambda_i\leq C\\\qquad\sum_{i=1}^N\lambda_iy_i=0,i=1,2,...,N\end{cases}
⎩⎪⎨⎪⎧minλ21∑i=1N∑j=1NλiλjyiyjK(xi,xj)−∑i=1Nλis.t.0≤λi≤C∑i=1Nλiyi=0,i=1,2,...,N
同时满足KKT条件:
{
λ
i
(
1
−
y
i
(
w
T
x
i
+
b
)
−
ξ
i
)
=
0
λ
i
≥
0
,
u
i
≥
0
y
i
(
w
T
x
i
+
b
)
≥
1
−
ξ
i
ξ
i
≥
0
u
i
ξ
i
=
0
,
i
=
1
,
2
,
.
.
.
,
N
\begin{cases}\lambda_i(1- y_i(w^Tx_i+b)-\xi_i)=0\\ \lambda_i\geq0,u_i\geq0\\y_i(w^Tx_i+b)\geq1-\xi_i\\\xi_i\geq0\\u_i\xi_i=0,i=1,2,...,N\end{cases}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧λi(1−yi(wTxi+b)−ξi)=0λi≥0,ui≥0yi(wTxi+b)≥1−ξiξi≥0uiξi=0,i=1,2,...,N
最优解的形式:
{
b
=
y
j
−
∑
i
=
1
N
λ
i
y
i
K
(
x
i
,
x
j
)
w
=
∑
i
=
1
N
λ
i
y
i
x
i
\begin{cases}b={y_j}-\sum_{i=1}^N\lambda_iy_iK(x_i,x_j)\\ w=\sum_{i=1}^N\lambda_iy_ix_i\end{cases}
{b=yj−∑i=1NλiyiK(xi,xj)w=∑i=1Nλiyixi
现在只要求得
λ
i
(
i
=
1
,
2
,
.
.
.
,
N
)
\lambda_i(i=1,2,...,N)
λi(i=1,2,...,N)就可以得到最终的超平面方程(因为求b需要带入支持向量,所以暂时不带入b的最优解表达式):
f
(
x
)
=
∑
i
=
1
N
λ
i
y
i
K
(
x
,
x
i
)
+
b
f(x)=\sum_{i=1}^N\lambda_iy_iK(x,x_i)+b
f(x)=i=1∑NλiyiK(x,xi)+b
上面优化问题的最优解
λ
i
\lambda_i
λi可以通过SMO(Sequential minimal optimization,序列最小化)算法求解,其基本思路是:如果所有变量的解都满足上面优化问题的KKT条件,那么这个问题的解就得到了,因为满足KKT条件是最优化问题的充分必要条件。
整个SMO算法分为两步:(1)求解两个变量二次规划的解析方法;(2)选择变量的启发式方法。
1.求解两个变量二次规划的解析方法
首先选择两个变量
λ
1
和
λ
2
\lambda_1和\lambda_2
λ1和λ2,并固定其他变量
λ
i
\lambda_i
λi不变,即当作常数处理,至于怎么选择
λ
1
和
λ
2
\lambda_1和\lambda_2
λ1和λ2在下一部分讲解。现在为了简化最优化问题的表达式,我们将包含变量
λ
1
和
λ
2
\lambda_1和\lambda_2
λ1和λ2的部分单独提出来:
{
m
i
n
λ
1
,
λ
2
1
2
λ
1
2
K
11
+
1
2
λ
2
2
K
22
+
y
1
y
2
λ
1
λ
2
K
12
+
y
1
λ
1
∑
i
=
3
N
λ
i
y
i
K
i
1
+
y
2
λ
2
∑
i
=
3
N
λ
i
y
i
K
i
2
−
λ
1
−
λ
2
s
.
t
.
λ
1
y
1
+
λ
2
y
2
=
−
∑
i
=
3
N
λ
i
y
i
=
c
0
≤
λ
i
≤
C
,
i
=
1
,
2
\begin{cases}min_{\lambda_1,\lambda_2}\quad\frac{1}{2}\lambda^2_1K_{11}+\frac{1}{2}\lambda^2_2K_{22}+y_1y_2\lambda_1\lambda_2K_{12}+y_1\lambda_1\sum_{i=3}^N\lambda_iy_iK_{i1}+y_2\lambda_2\sum_{i=3}^N\lambda_iy_iK_{i2}-\lambda_1-\lambda_2\\ s.t. \quad\lambda_1y_1+\lambda_2y_2=-\sum_{i=3}^N\lambda_iy_i=c\\ \quad\quad 0\leq\lambda_i\leq C, i=1,2\end{cases}
⎩⎪⎨⎪⎧minλ1,λ221λ12K11+21λ22K22+y1y2λ1λ2K12+y1λ1∑i=3NλiyiKi1+y2λ2∑i=3NλiyiKi2−λ1−λ2s.t.λ1y1+λ2y2=−∑i=3Nλiyi=c0≤λi≤C,i=1,2
其中,
K
i
j
=
K
(
x
i
,
x
j
)
,
i
=
1
,
2
,
.
.
.
,
N
K_{ij}=K(x_i, x_j),i=1,2,...,N
Kij=K(xi,xj),i=1,2,...,N,c是常数,并吧目标优化函数中包含了固定不变的
λ
\lambda
λ常数部分省略掉。
令
v
j
=
∑
i
=
3
N
λ
i
y
i
K
i
j
=
f
(
x
j
)
−
∑
i
=
1
2
λ
i
y
i
K
i
j
−
b
,
(
j
=
1
,
2
)
v_j=\sum_{i=3}^N\lambda_iy_iK_{ij}=f(x_j)-\sum_{i=1}^2\lambda_iy_iK_{ij}-b,(j=1,2)
vj=∑i=3NλiyiKij=f(xj)−∑i=12λiyiKij−b,(j=1,2),然后根据上面的第一个约束条件可得:
λ
1
=
(
c
−
λ
2
y
2
)
y
1
\lambda_1=(c-\lambda_2y_2)y_1
λ1=(c−λ2y2)y1
将上式代入优化问题中,得:
W
(
λ
2
)
=
1
2
(
c
−
λ
2
y
2
)
2
K
11
+
1
2
λ
2
2
K
22
+
y
2
(
c
−
λ
2
y
2
)
λ
2
K
12
+
(
c
−
λ
2
y
2
)
v
1
+
y
2
λ
2
v
2
−
(
c
−
λ
2
y
2
)
y
1
−
λ
2
W(\lambda_2)=\frac{1}{2}(c-\lambda_2y_2)^2K_{11}+\frac{1}{2}\lambda^2_2K_{22}+y_2(c-\lambda_2y_2)\lambda_2K_{12}+(c-\lambda_2y_2)v_1+y_2\lambda_2v_2-(c-\lambda_2y_2)y_1-\lambda_2
W(λ2)=21(c−λ2y2)2K11+21λ22K22+y2(c−λ2y2)λ2K12+(c−λ2y2)v1+y2λ2v2−(c−λ2y2)y1−λ2
然后现在求解上面这个最优化问题我们直接对
λ
2
\lambda_2
λ2求导并令其为0:
∂
W
∂
λ
2
=
(
λ
2
−
c
y
2
)
K
11
+
λ
2
K
22
+
(
y
2
c
−
2
λ
2
)
K
12
−
y
2
v
1
+
y
2
v
2
+
y
1
y
2
−
1
=
0
⇒
λ
2
(
K
11
+
K
22
−
2
K
12
)
=
y
2
(
c
K
11
−
c
K
12
+
v
1
−
v
2
+
y
2
−
y
1
)
⇒
λ
2
(
K
11
+
K
22
−
2
K
12
)
=
y
2
(
c
K
11
−
c
K
12
+
(
f
(
x
1
)
−
∑
i
=
1
2
λ
i
y
i
K
i
1
−
b
)
−
(
f
(
x
2
)
−
∑
i
=
1
2
λ
i
y
i
K
i
2
−
b
)
+
y
2
−
y
1
)
\frac{\partial W}{\partial \lambda_2}=(\lambda_2-cy_2)K_{11}+\lambda_2K_{22}+(y_2c-2\lambda_2)K_{12}-y_2v_1+y_2v_2+y_1y_2-1=0\\\Rightarrow\lambda_2(K_{11}+K_{22}-2K_{12})=y_2(cK_{11}-cK_{12}+v_1-v_2+y_2-y_1)\\\Rightarrow\lambda_2(K_{11}+K_{22}-2K_{12})=y_2(cK_{11}-cK_{12}+(f(x_1)-\sum_{i=1}^2\lambda_iy_iK_{i1}-b)-(f(x_2)-\sum_{i=1}^2\lambda_iy_iK_{i2}-b)+y_2-y_1)
∂λ2∂W=(λ2−cy2)K11+λ2K22+(y2c−2λ2)K12−y2v1+y2v2+y1y2−1=0⇒λ2(K11+K22−2K12)=y2(cK11−cK12+v1−v2+y2−y1)⇒λ2(K11+K22−2K12)=y2(cK11−cK12+(f(x1)−i=1∑2λiyiKi1−b)−(f(x2)−i=1∑2λiyiKi2−b)+y2−y1)
现在假设优化问题的初始解为
λ
1
o
l
d
,
λ
2
o
l
d
\lambda_1^{old},\lambda_2^{old}
λ1old,λ2old,最优解为
λ
1
n
e
w
,
λ
2
n
e
w
\lambda_1^{new},\lambda_2^{new}
λ1new,λ2new,然后将
c
=
λ
1
o
l
d
y
1
+
λ
2
o
l
d
y
2
c=\lambda_1^{old}y_1+\lambda_2^{old}y_2
c=λ1oldy1+λ2oldy2带入上式中,并令
E
i
=
f
(
x
i
)
−
y
i
E_i=f(x_i)-y_i
Ei=f(xi)−yi(表示预测值和真实值之间的误差)以及令
η
=
X
11
+
X
22
−
2
X
12
\eta=X_{11}+X_{22}-2X_{12}
η=X11+X22−2X12,化简求解得到:
λ
2
n
e
w
=
λ
2
o
l
d
+
y
2
(
E
1
−
E
2
)
η
\lambda^{new}_2=\lambda^{old}_2+\frac{y_2(E_1-E_2)}{\eta}
λ2new=λ2old+ηy2(E1−E2)
因为优化问题对于
λ
2
\lambda_2
λ2是有约束的,所以我们假设
L
≤
λ
2
n
e
w
≤
H
L\leq\lambda^{new}_2\leq H
L≤λ2new≤H,然后根据
λ
1
o
l
d
y
1
+
λ
2
o
l
d
y
2
=
λ
1
n
e
w
y
1
+
λ
2
n
e
w
y
2
=
c
\lambda^{old}_1y_1+\lambda^{old}_2y_2=\lambda^{new}_1y_1+\lambda^{new}_2y_2=c
λ1oldy1+λ2oldy2=λ1newy1+λ2newy2=c和
0
≤
λ
i
≤
C
0\leq\lambda_i\leq C
0≤λi≤C这两个条件来求
λ
2
n
e
w
\lambda^{new}_2
λ2new的取值范围:
(1)当
y
1
≠
y
2
y_1\neq y_2
y1=y2时,因为y的取值是1或-1,所以我们可得:
λ
1
o
l
d
−
λ
2
o
l
d
=
c
,
λ
1
n
e
w
−
λ
2
n
e
w
=
c
⟺
λ
2
n
e
w
=
λ
1
n
e
w
−
c
\lambda^{old}_1-\lambda^{old}_2=c,\lambda^{new}_1-\lambda^{new}_2=c\iff \lambda^{new}_2=\lambda^{new}_1-c
λ1old−λ2old=c,λ1new−λ2new=c⟺λ2new=λ1new−c
当
λ
1
n
e
w
\lambda^{new}_1
λ1new取得最大值C时,同样
λ
2
n
e
w
\lambda^{new}_2
λ2new也取得最大值C-c;当
λ
1
n
e
w
\lambda^{new}_1
λ1new取得最小值0时,同样
λ
2
n
e
w
\lambda^{new}_2
λ2new也取得最小值-c,所以
−
c
≤
λ
2
n
e
w
≤
C
−
c
-c\leq\lambda^{new}_2\leq C-c
−c≤λ2new≤C−c,同时结合
0
≤
λ
2
n
e
w
≤
C
0\leq\lambda^{new}_2\leq C
0≤λ2new≤C(取交集):
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,\lambda^{old}_2-\lambda^{old}_1),H=min(C,C+\lambda^{old}_2-\lambda^{old}_1)
L=max(0,λ2old−λ1old),H=min(C,C+λ2old−λ1old)
(2)当
y
1
=
y
2
y_1= y_2
y1=y2时,同理可得:
L
=
m
a
x
(
0
,
λ
1
o
l
d
+
λ
2
o
l
d
−
C
)
,
H
=
m
i
n
(
C
,
λ
1
o
l
d
+
λ
2
o
l
d
)
L=max(0,\lambda^{old}_1+\lambda^{old}_2-C),H=min(C,\lambda^{old}_1+\lambda^{old}_2)
L=max(0,λ1old+λ2old−C),H=min(C,λ1old+λ2old)
所以当求得
λ
2
\lambda_2
λ2后需要结合
L
,
H
L,H
L,H进行相应的处理。
现在我们求出
λ
2
n
e
w
\lambda^{new}_2
λ2new之后,根据
λ
1
o
l
d
y
1
+
λ
2
o
l
d
y
2
=
λ
1
n
e
w
y
1
+
λ
2
n
e
w
y
2
\lambda^{old}_1y_1+\lambda^{old}_2y_2=\lambda^{new}_1y_1+\lambda^{new}_2y_2
λ1oldy1+λ2oldy2=λ1newy1+λ2newy2,求出
λ
1
n
e
w
\lambda^{new}_1
λ1new:
λ
1
n
e
w
=
λ
1
o
l
d
+
(
λ
2
o
l
d
−
λ
2
n
e
w
)
y
1
y
2
\lambda^{new}_1=\lambda^{old}_1+(\lambda^{old}_2-\lambda^{new}_2)y_1y_2
λ1new=λ1old+(λ2old−λ2new)y1y2
2.选择变量的启发式方法
SMO算法在每个子问题中选择两个变量优化,其中至少一个变量是违反KKT条件得。
2.1第一个变量 λ 1 \lambda_1 λ1的选择
SMO算法选择第一个变量的过程称为外层循环。基本思想是在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量。违反KKT条件即是否满足KKT条件:
{
λ
i
=
0
⇔
y
i
f
(
x
i
)
≥
1
0
<
λ
i
<
C
⇔
y
i
f
(
x
i
)
=
1
λ
i
=
C
⇔
y
i
f
(
x
i
)
≤
1
\begin{cases}\lambda_i=0 \Leftrightarrow y_if(x_i)\geq1\\0<\lambda_i<C \Leftrightarrow y_if(x_i)=1\\\lambda_i=C \Leftrightarrow y_if(x_i)\leq1\end{cases}
⎩⎪⎨⎪⎧λi=0⇔yif(xi)≥10<λi<C⇔yif(xi)=1λi=C⇔yif(xi)≤1
其中
f
(
x
)
f(x)
f(x)是超平面方程。
整体流程:外层循环首先遍历所有满足条件 0 < λ i < C 0<\lambda_i<C 0<λi<C的样本点,即在间隔边界上的支持向量点,检验他们是否满足KKT条件;如果这些样本点都满足KKT条件,那么遍历整个训练集,检验他们是否满足KKT条件。
2.2第二个变量 λ 2 \lambda_2 λ2的选择
选择第2个变量的标准是希望能使 λ 2 \lambda_2 λ2有足够大的变化,因为 λ 2 n e w = λ 2 o l d + y 2 ( E 1 − E 2 ) η \lambda^{new}_2=\lambda^{old}_2+\frac{y_2(E_1-E_2)}{\eta} λ2new=λ2old+ηy2(E1−E2),所以我们会选择 ∣ E 1 − E 2 ∣ |E_1-E_2| ∣E1−E2∣最大的 λ 2 \lambda_2 λ2,即保证每次优化中采取最大步长。
在特殊情况下,如果内层循环通过上面方法找到的 λ 2 \lambda_2 λ2不能使得目标函数有足够的下降,那么继续选择 λ 2 \lambda_2 λ2,遍历在间隔边界上的支持向量点,一次将其作为 λ 2 \lambda_2 λ2试用,只有目标函数有足够的下降。若找不到合适的 λ 2 \lambda_2 λ2,那么遍历整个训练集;若仍然找不到则放弃第一个选择的 λ 1 \lambda_1 λ1,重新通过外层循环选择另外的 λ 1 \lambda_1 λ1。
需要注意的是:每次在计算完两个
λ
\lambda
λ后都要更新超平面方程中的b:
当
0
<
λ
1
n
e
w
<
C
0<\lambda_1^{new}<C
0<λ1new<C时由KKT条件可得
∑
i
=
1
N
λ
i
y
i
K
i
1
+
b
=
y
1
⇒
b
1
n
e
w
=
y
1
−
∑
i
=
3
N
λ
i
y
i
K
i
1
−
λ
1
n
e
w
y
1
K
11
−
λ
2
n
e
w
y
2
K
21
\sum_{i=1}^N\lambda_iy_iK_{i1}+b=y_1\\\Rightarrow b^{new}_1=y_1-\sum_{i=3}^N\lambda_iy_iK_{i1}-\lambda_1^{new}y_1K_{11}-\lambda_2^{new}y_2K_{21}
i=1∑NλiyiKi1+b=y1⇒b1new=y1−i=3∑NλiyiKi1−λ1newy1K11−λ2newy2K21
又因为由
E
1
=
f
(
x
1
)
−
y
1
=
∑
i
=
3
N
λ
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=f(x_1)-y_1=\sum_{i=3}^N\lambda_iy_iK_{i1}+\lambda_1^{old}y_1K_{11}+\lambda_2^{old}y_2K_{21}+b^{old}-y_1
E1=f(x1)−y1=∑i=3NλiyiKi1+λ1oldy1K11+λ2oldy2K21+bold−y1可得:
y
1
−
∑
i
=
3
N
λ
i
y
i
K
i
1
=
−
E
1
+
λ
1
o
l
d
y
1
K
11
+
λ
2
o
l
d
y
2
K
21
+
b
o
l
d
y_1-\sum_{i=3}^N\lambda_iy_iK_{i1}=-E_1+\lambda_1^{old}y_1K_{11}+\lambda_2^{old}y_2K_{21}+b^{old}
y1−i=3∑NλiyiKi1=−E1+λ1oldy1K11+λ2oldy2K21+bold
将上式代入b中可得:
b
1
n
e
w
=
b
o
l
d
−
E
1
−
y
1
(
λ
1
n
e
w
−
λ
1
o
l
d
)
K
11
−
y
2
(
λ
2
n
e
w
−
λ
2
o
l
d
)
K
12
b^{new}_1=b^{old}-E_1-y_1(\lambda^{new}_1-\lambda^{old}_1)K_{11}-y_2(\lambda^{new}_2-\lambda^{old}_2)K_{12}
b1new=bold−E1−y1(λ1new−λ1old)K11−y2(λ2new−λ2old)K12
同理可得,当
0
<
λ
2
n
e
w
<
C
0<\lambda_2^{new}<C
0<λ2new<C时:
b
2
n
e
w
=
b
o
l
d
−
E
2
−
y
1
(
λ
1
n
e
w
−
λ
1
o
l
d
)
K
12
−
y
2
(
λ
2
n
e
w
−
λ
2
o
l
d
)
K
22
b^{new}_2=b^{old}-E_2-y_1(\lambda^{new}_1-\lambda^{old}_1)K_{12}-y_2(\lambda^{new}_2-\lambda^{old}_2)K_{22}
b2new=bold−E2−y1(λ1new−λ1old)K12−y2(λ2new−λ2old)K22
如果 λ 1 n e w , λ 2 n e w \lambda_1^{new},\lambda_2^{new} λ1new,λ2new同时满足 0 < λ i n e w < C 0<\lambda_i^{new}<C 0<λinew<C,那么 b 1 n e w = b 2 n e w b_1^{new}=b_2^{new} b1new=b2new;如果 λ 1 n e w , λ 2 n e w \lambda_1^{new},\lambda_2^{new} λ1new,λ2new为0或C,那么取 b 1 n e w , b 2 n e w b_1^{new},b_2^{new} b1new,b2new的中点作为更新的b。