SMO算法流程
Posted Kalzn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SMO算法流程相关的知识,希望对你有一定的参考价值。
SMO 算法流程
python代码见github
问题简介
SMO(Sequential Minimal Optimization)用于解决支持向量机中的对偶问题的最优化求解过程,该问题为:
m
a
x
α
∑
i
=
1
N
α
i
−
1
2
∑
i
=
1
N
∑
j
=
1
N
y
i
y
j
α
i
α
j
K
i
j
max_\\boldsymbol\\alpha\\sum_i=1^N\\alpha_i-\\frac12\\sum_i=1^N\\sum_j=1^Ny_iy_j\\alpha_i\\alpha_jK_ij
maxαi=1∑Nαi−21i=1∑Nj=1∑NyiyjαiαjKij
s
.
t
.
0
≤
α
i
≤
C
,
∑
i
=
1
N
α
i
y
i
=
0
s.t.\\ \\ \\ 0 \\le \\alpha_i \\le C, \\sum_i=1^N\\alpha_iy_i=0
s.t. 0≤αi≤C,i=1∑Nαiyi=0
而此问题也满足KKT条件要求
α
i
≥
0
,
μ
i
≥
0
y
i
f
(
x
i
)
−
1
+
ξ
i
≤
0
α
i
(
y
i
f
(
x
i
)
−
1
+
ξ
i
)
=
0
ξ
i
≥
0
,
μ
i
ξ
i
=
0
\\left\\ \\beginaligned \\alpha_i \\ge 0, \\mu_i \\ge 0\\\\ y_if(\\boldsymbolx_i)-1+\\xi_i \\le 0\\\\ \\alpha_i(y_if(\\boldsymbolx_i)-1+\\xi_i) = 0 \\\\ \\xi_i \\ge 0, \\mu_i\\xi_i=0 \\endaligned \\right .
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧αi≥0,μi≥0yif(xi)−1+ξi≤0αi(yif(xi)−1+ξi)=0ξi≥0,μiξi=0
流程
该问题是一种凸二次规划问题,但是如果当作一般情况处理,计算过于繁琐。好在我们可以利用该问题特殊情况,得以特殊处理以简化流程。
SMO算法的核心思想是利用 ∑ i = 1 N α i y i = 0 \\sum_i=1^N\\alpha_iy_i=0 ∑i=1Nαiyi=0这一条件,进行特殊处理。由于一次性确定所有 α \\alpha α的最优化取值是十分困难,所谓我们不妨每次只考虑变更两个变量 α i , α j \\alpha_i,\\alpha_j αi,αj,然后唯一确定剩下的变量为 ∑ k = 1 , k ≠ i , k ≠ j N α k y k = − ( α i y i + α j y j ) \\sum_k=1,k \\ne i, k\\ne j^N\\alpha_ky_k= - (\\alpha_iy_i+\\alpha_jy_j) ∑k=1,k=i,k=jNαkyk=−(αiyi+αjyj)。这里为什么选择两个变量,每次只选择一个不应该更容易吗?这里我们要注意,我们是通过迭代的方式每次选取一组 α \\alpha α的值进行更改。鉴于条件 ∑ i = 1 N α i y i = 0 \\sum_i=1^N\\alpha_iy_i=0 ∑i=1Nαiyi=0,我们是无法对单一 α \\alpha α进行修改的,换句话说,如果我们更改了一个变量 α i \\alpha_i αi,则必须有另一个变量 α j \\alpha_j αj跟随发生改变以满足 ∑ i = 1 N α i y i = 0 \\sum_i=1^N\\alpha_iy_i=0 ∑i=1Nαiyi=0。
以下,为了表述方便,我们每次选择的变量定为
α
1
,
α
2
\\alpha_1,\\alpha_2
α1,α2,此时目标函数可以写成:
W
(
α
1
,
α
2
)
=
α
1
+
α
2
−
1
2
K
11
y
1
2
α
1
2
−
1
2
K
22
y
2
2
α
2
2
−
K
12
y
1
y
2
α
1
α
2
−
y
1
α
1
∑
i
=
3
N
α
i
y
i
K
i
1
−
y
2
α
2
∑
i
=
3
N
α
i
y
i
K
i
2
+
C
W(\\alpha_1,\\alpha_2)=\\alpha_1+\\alpha_2-\\frac12K_11y_1^2\\alpha_1^2-\\frac12K_22y_2^2\\alpha_2^2 - K_12y_1y_2\\alpha_1\\alpha_2-y_1\\alpha_1\\sum_i=3^N\\alpha_iy_iK_i1-y_2\\alpha_2\\sum_i=3^N\\alpha_iy_iK_i2+C
W(α1,α2)=SMO算法流程