支持向量机原理(四)
在SVM的前三篇里,我们优化的目标函数最终都是一个关于 α α 向量的函数。而怎么极小化这个函数,求出对应的 α α 向量,进而求出分离超平面我们没有讲。本篇就对优化这个关于 α α 向量的函数的SMO算法做一个总结。
1. 回顾SVM优化目标函数
我们首先回顾下我们的优化目标函数:
我们的解要满足的KKT条件的对偶互补条件为:
根据这个 KKT条件的对偶互补条件,我们有:
由于 w∗=∑j=1mα∗jyjϕ(xj) w ∗ = ∑ j = 1 m α j ∗ y j ϕ ( x j ) ,我们令 g(x)=w∗∙ϕ(x)+b=∑j=1mα∗jyjK(x,xj)+b∗ g ( x ) = w ∗ ∙ ϕ ( x ) + b = ∑ j = 1 m α j ∗ y j K ( x , x j ) + b ∗ ,则有:
2. SMO算法的基本思想
上面这个优化式子比较复杂,里面有m个变量组成的向量
α
α
需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于
∑i=1mαiyi=0
∑
i
=
1
m
α
i
y
i
=
0
.假如将
α3,α4,...,αm
α
3
,
α
4
,
.
.
.
,
α
m
固定,那么
α1,α2
α
1
,
α
2
之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。
为了后面表示方便,我们定义
Kij=ϕ(xi)∙ϕ(xj)
K
i
j
=
ϕ
(
x
i
)
∙
ϕ
(
x
j
)
由于
α3,α4,...,αm
α
3
,
α
4
,
.
.
.
,
α
m
都成了常量,所有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成下式:
3. SMO算法目标函数的优化
为了求解上面含有这两个变量的目标优化问题,我们首先分析约束条件,所有的
α1,α2
α
1
,
α
2
都要满足约束条件,然后在约束条件下求最小。
根据上面的约束条件
α1y1+α2y2=ς0≤αi≤Ci=1,2
α
1
y
1
+
α
2
y
2
=
ς
0
≤
α
i
≤
C
i
=
1
,
2
,又由于
y1,y2
y
1
,
y
2
均只能取值1或者-1, 这样
α1,α2
α
1
,
α
2
在[0,C]和[0,C]形成的盒子里面,并且两者的关系直线的斜率只能为1或者-1,也就是说
α1,α2
α
1
,
α
2
的关系直线平行于[0,C]和[0,C]形成的盒子的对角线,如下图所示:
![SMO1](https://i-blog.csdnimg.cn/blog_migrate/3505db3811679ae298757e0bc33ffdde.png)
由于
α1,α2
α
1
,
α
2
的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上仅仅是一个变量的优化问题。不妨我们假设最终是
α2
α
2
的优化问题。由于我们采用的是启发式的迭代法,假设我们上一轮迭代得到的解是
αold1,αold2
α
1
o
l
d
,
α
2
o
l
d
,假设沿着约束方向
α2
α
2
未经剪辑的解是
αnew,unc2
α
2
n
e
w
,
u
n
c
.本轮迭代完成后的解为
αnew1,αnew2
α
1
n
e
w
,
α
2
n
e
w
由于
αnew2
α
2
n
e
w
必须满足上图中的线段约束。假设L和H分别是上图中
αnew2
α
2
n
e
w
所在的线段的边界。那么很显然我们有:
而对于L和H,我们也有限制条件如果是上面左图中的情况,则
如果是上面右图中的情况,我们有:
也就是说,假如我们通过求导得到的 αnew,unc2 α 2 n e w , u n c ,则最终的 αnew2 α 2 n e w 应该为:
那么如何求出 αnew,unc2 α 2 n e w , u n c 呢?很简单,我们只需要将目标函数对 α2 α 2 求偏导数即可。首先我们整理下我们的目标函数,为了简化叙述,我们令
其中 g(x) g ( x ) 就是我们在第一节里面的提到的
我们令
这样我们的优化目标函数进一步简化为:
由于 α1y1+α2y2=ς α 1 y 1 + α 2 y 2 = ς ,并且 y2i=1 y i 2 = 1 ,可以得到 α1用α2 α 1 用 α 2 表达的式子为:
将上式带入我们的目标优化函数,就可以消除 α1 α 1 ,得到仅仅包含 α2 α 2 的式子。
忙了半天,我们终于可以开始求 αnew,unc2 α 2 n e w , u n c 了,现在我们开始通过求偏导数来得到 αnew,unc2 α 2 n e w , u n c 。
整理上式有:
将 ς=α1y1+α2y2 ς = α 1 y 1 + α 2 y 2 带入上式,我们有:
我们终于得到了 αnew,unc2 α 2 n e w , u n c 的表达式:
利用上面讲到的 αnew,unc2 α 2 n e w , u n c 和 αnew2 α 2 n e w 的关系式,我们就可以得到我们新的 αnew2 α 2 n e w 了。利用 αnew2 α 2 n e w 和 αnew1 α 1 n e w 的线性关系,我们也可以得到新的 αnew1 α 1 n e w 。
4. SMO算法两个变量的选择
SMO算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?
4.1 第一个变量的选择
SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点。对于每个样本点,要满足的KKT条件我们在第一节已经讲到了:
一般来说,我们首先选择违反 0<α∗i<C⇒yig(xi)=1 0 < α i ∗ < C ⇒ y i g ( x i ) = 1 这个条件的点。如果这些支持向量都满足KKT条件,再选择违反 α∗i=0⇒yig(xi)≥1 α i ∗ = 0 ⇒ y i g ( x i ) ≥ 1 和 α∗i=C⇒yig(xi)≤1 α i ∗ = C ⇒ y i g ( x i ) ≤ 1 的点。
4.2 第二个变量的选择
SMO算法称选择第二一个变量为内层循环,假设我们在外层循环已经找到了
α1
α
1
, 第二个变量
α2
α
2
的选择标准是让
|E1−E2|
|
E
1
−
E
2
|
有足够大的变化。由于
α1
α
1
定了的时候,
E1
E
1
也确定了,所以要想
|E1−E2|
|
E
1
−
E
2
|
最大,只需要在
E1
E
1
为正时,选择最小的
Ei
E
i
作为
E2
E
2
, 在
E1
E
1
为负时,选择最大的
Ei
E
i
作为
E2
E
2
,可以将所有的
Ei
E
i
保存下来加快迭代。
如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做
α2
α
2
,直到目标函数有足够的下降, 如果所有的支持向量做
α2
α
2
都不能让目标函数有足够的下降,可以跳出循环,重新选择
α1
α
1
4.3 计算阈值b和差值 Ei E i
在每次完成两个变量的优化之后,需要重新计算阈值b。当
0≤αnew1≤C
0
≤
α
1
n
e
w
≤
C
时,我们有
于是新的 bnew1 b 1 n e w 为:
计算出 E1 E 1 为:
可以看到上两式都有 y1−∑i=3mαiyiKi1 y 1 − ∑ i = 3 m α i y i K i 1 ,因此可以将 bnew1 b 1 n e w 用 E1 E 1 表示为:
同样的,如果 0<αnew2<C 0 < α 2 n e w < C , 那么有:
最终的 bnew b n e w 为:
得到了 bnew b n e w 我们需要更新 Ei E i :
其中,S是所有支持向量 xj x j 的集合。
5. SMO算法总结
输入是m个样本 (x1,y1),(x2,y2),...,(xm,ym), ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , ,其中x为n维特征向量。y为二元输出,值为1,或者-1.精度e。输出是近似解 α α
- 取初值 α0=0,k=0 α 0 = 0 , k = 0
- 按照4.1节的方法选择
αk1
α
1
k
,接着按照4.2节的方法选择
αk2
α
2
k
,求出新的
αnew,unc2
α
2
n
e
w
,
u
n
c
。
αnew,unc2=αk2+y2(E1−E2)K11+K22−2K12) α 2 n e w , u n c = α 2 k + y 2 ( E 1 − E 2 ) K 11 + K 22 − 2 K 12 ) - 按照下式求出
αk+12
α
2
k
+
1
αk+12=⎧⎩⎨⎪⎪Hαnew,unc2Lαnew,unc2>HL≤αnew,unc2≤Hαnew,unc2<L α 2 k + 1 = { 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 - 利用 αk+12 α 2 k + 1 和 αk+11 α 1 k + 1 的关系求出 αk+11 α 1 k + 1
- 按照4.3节的方法计算 bk+1 b k + 1 和 Ei E i
- 在精度e范围内检查是否满足如下的终止条件:
∑i=1mαiyi=0 ∑ i = 1 m α i y i = 0
0≤αi≤C,i=1,2...m 0 ≤ α i ≤ C , i = 1 , 2... m
αk+1i=0⇒yig(xi)≥1 α i k + 1 = 0 ⇒ y i g ( x i ) ≥ 1
0<αk+1i<C⇒yig(xi)=1 0 < α i k + 1 < C ⇒ y i g ( x i ) = 1
αk+1i=C⇒yig(xi)≤1 α i k + 1 = C ⇒ y i g ( x i ) ≤ 1 - 如果满足则结束,返回 αk+1 α k + 1 ,否则转到步骤2