(十二)支持向量机(Support Vecor Machine)4

支持向量机原理(四)

  在SVM的前三篇里,我们优化的目标函数最终都是一个关于 α α 向量的函数。而怎么极小化这个函数,求出对应的 α α 向量,进而求出分离超平面我们没有讲。本篇就对优化这个关于 α α 向量的函数的SMO算法做一个总结。

1. 回顾SVM优化目标函数

  我们首先回顾下我们的优化目标函数:

minα 12i=1,j=1mαiαjyiyjK(xi,xj)i=1mαi 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

s.t.i=1mαiyi=0 s . t . ∑ i = 1 m α i y i = 0

0αiC 0 ≤ α i ≤ C

  我们的解要满足的KKT条件的对偶互补条件为:
αi(yi(wTxi+b)1+ξi)=0 α i ∗ ( y i ( w T x i + b ) − 1 + ξ i ∗ ) = 0

  根据这个 KKT条件的对偶互补条件,我们有:
αi=0yi(wϕ(xi)+b)  1 α i ∗ = 0 ⇒ y i ( w ∗ ∙ ϕ ( x i ) + b )   ≥   1
0<αi <C yi(wϕ(xi)+b) = 1 0 < α i ∗   < C   ⇒ y i ( w ∗ ∙ ϕ ( x i ) + b )   =   1

αi= Cyi(wϕ(xi)+b) 1 α i ∗ =   C ⇒ y i ( w ∗ ∙ ϕ ( x i ) + b )   ≤ 1

  由于 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 ∗ ,则有:
αi=0yig(xi)  1 α i ∗ = 0 ⇒ y i g ( x i )   ≥   1

0<αi <C yig(xi)  = 1 0 < α i ∗   < C   ⇒ y i g ( x i )     =   1

αi= Cyig(xi)  1 α i ∗ =   C ⇒ y i g ( x i )     ≤ 1

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 都成了常量,所有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成下式:

minα1,α112K11α21+12K22α22+y1y2K12α1α2(α1+α2) +y1α1i=3myiαiKi1+y2α2i=3myiαiKi2 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

s.t.α1y1+ α2y2=i=3myiαi=ς s . t . α 1 y 1 +   α 2 y 2 = − ∑ i = 3 m y i α i = ς

0αiCi=1,2 0 ≤ α i ≤ C i = 1 , 2

3. SMO算法目标函数的优化

  为了求解上面含有这两个变量的目标优化问题,我们首先分析约束条件,所有的 α1,α2 α 1 , α 2 都要满足约束条件,然后在约束条件下求最小。
  根据上面的约束条件 α1y1+α2y2=ς0αiCi=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

  由于 α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αnew2H L ≤ α 2 n e w ≤ H

  而对于L和H,我们也有限制条件如果是上面左图中的情况,则
L=max(0,αold2αold1)H=min(C,C+αold2αold1) 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,αold2+αold1C)H=min(C,αold2+αold1) 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 )

  也就是说,假如我们通过求导得到的 αnew,unc2 α 2 n e w , u n c ,则最终的 αnew2 α 2 n e w 应该为:
αnew2=Hαnew,unc2Lαnew,unc2 >HLαnew,unc2 Hαnew,unc2<L α 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

  那么如何求出 αnew,unc2 α 2 n e w , u n c 呢?很简单,我们只需要将目标函数对 α2 α 2 求偏导数即可。首先我们整理下我们的目标函数,为了简化叙述,我们令
Ei=g(xi)yi=j=1mαjyjK(xi,xj)+byi E i = g ( x i ) − y i = ∑ j = 1 m α j ∗ y j K ( x i , x j ) + b − y i

  其中 g(x) g ( x ) 就是我们在第一节里面的提到的
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 ∗

  我们令
vi=i=3myjαjK(xi,xj)=g(xi) i=12yjαjK(xi,xj)b v i = ∑ i = 3 m y j α j K ( x i , x j ) = g ( x i ) −   ∑ i = 1 2 y j α j K ( x i , x j ) − b

  这样我们的优化目标函数进一步简化为:
W(α1,α2)=12K11α21+12K22α22+y1y2K12α1α2(α1+α2) +y1α1v1+ y2α2v2 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

  由于 α1y1+α2y2=ς α 1 y 1 + α 2 y 2 = ς ,并且 y2i=1 y i 2 = 1 ,可以得到 α1α2 α 1 用 α 2 表达的式子为:
α1=y1(ς α2y2) α 1 = y 1 ( ς   − α 2 y 2 )

  将上式带入我们的目标优化函数,就可以消除 α1 α 1 ,得到仅仅包含 α2 α 2 的式子。
W(α2)=12K11(ς α2y2)2+12K22α22+y2K12(ς α2y2)α2(α1+α2) +(ς α2y2)v1+ y2α2v2 W ( α 2 ) = 1 2 K 11 ( ς   − α 2 y 2 ) 2 + 1 2 K 22 α 2 2 + y 2 K 12 ( ς   − α 2 y 2 ) α 2 − ( α 1 + α 2 )   + ( ς   − α 2 y 2 ) v 1 +   y 2 α 2 v 2

  忙了半天,我们终于可以开始求 αnew,unc2 α 2 n e w , u n c 了,现在我们开始通过求偏导数来得到 αnew,unc2 α 2 n e w , u n c
Wα2=K11α2+ K22α22K12α2 K11ς y2+K12ς y2+y1y21v1y2+y2v2=0 ∂ 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

  整理上式有:
(K11+K222K12)α2=y2(y2y1+ς K11 ς K12+v1v2) ( K 11 + K 22 − 2 K 12 ) α 2 = y 2 ( y 2 − y 1 + ς   K 11 −   ς   K 12 + v 1 − v 2 )

= y2(y2y1+ς K11 ς K12+(g(x1) j=12yjαjK1jb)(g(x2) j=12yjαjK2jb)) =   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 ) )

  将 ς=α1y1+α2y2 ς = α 1 y 1 + α 2 y 2 带入上式,我们有:
(K11+K222K12)αnew,unc2=y2((K11+K222K12)αold2y2+y2y1+g(x1)g(x2)) ( 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 ) )

=(K11+K222K12) αold2+y2(E1E2) = ( K 11 + K 22 − 2 K 12 )   α 2 o l d + y 2 ( E 1 − E 2 )

  我们终于得到了 αnew,unc2 α 2 n e w , u n c 的表达式:
αnew,unc2=αold2+y2(E1E2)K11+K222K12 α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 ) K 11 + K 22 − 2 K 12

  利用上面讲到的 α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条件我们在第一节已经讲到了:

αi=0yig(xi)1 α i ∗ = 0 ⇒ y i g ( x i ) ≥ 1

0<αi<Cyig(xi)=1 0 < α i ∗ < C ⇒ y i g ( x i ) = 1

αi=Cyig(xi)1 α i ∗ = C ⇒ y i g ( x i ) ≤ 1

  一般来说,我们首先选择违反 0<αi<Cyig(xi)=1 0 < α i ∗ < C ⇒ y i g ( x i ) = 1 这个条件的点。如果这些支持向量都满足KKT条件,再选择违反 αi=0yig(xi)1 α i ∗ = 0 ⇒ y i g ( x i ) ≥ 1 αi=Cyig(xi)1 α i ∗ = C ⇒ y i g ( x i ) ≤ 1 的点。

4.2 第二个变量的选择

  SMO算法称选择第二一个变量为内层循环,假设我们在外层循环已经找到了 α1 α 1 , 第二个变量 α2 α 2 的选择标准是让 |E1E2| | E 1 − E 2 | 有足够大的变化。由于 α1 α 1 定了的时候, E1 E 1 也确定了,所以要想 |E1E2| | 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αnew1C 0 ≤ α 1 n e w ≤ C 时,我们有

y1i=1mαiyiKi1b1=0 y 1 − ∑ i = 1 m α i y i K i 1 − b 1 = 0

  于是新的 bnew1 b 1 n e w 为:
bnew1=y1i=3mαiyiKi1αnew1y1K11αnew2y2K21 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

  计算出 E1 E 1 为:
E1=g(x1)y1=i=3mαiyiKi1+αold1y1K11+αold2y2K21+boldy1 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

  可以看到上两式都有 y1i=3mαiyiKi1 y 1 − ∑ i = 3 m α i y i K i 1 ,因此可以将 bnew1 b 1 n e w E1 E 1 表示为:
bnew1=E1y1K11(αnew1αold1)y2K21(αnew2αold2)+bold 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

  同样的,如果 0<αnew2<C 0 < α 2 n e w < C , 那么有:
bnew2=E2y1K12(αnew1αold1)y2K22(αnew2αold2)+bold 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

  最终的 bnew b n e w 为:
bnew=bnew1+bnew22 b n e w = b 1 n e w + b 2 n e w 2

  得到了 bnew b n e w 我们需要更新 Ei E i :
Ei=SyjαjK(xi,xj)+bnewyi E i = ∑ S y j α j K ( x i , x j ) + b n e w − y 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。输出是近似解 α α

  1. 取初值 α0=0,k=0 α 0 = 0 , k = 0
  2. 按照4.1节的方法选择 αk1 α 1 k ,接着按照4.2节的方法选择 αk2 α 2 k ,求出新的 αnew,unc2 α 2 n e w , u n c
    αnew,unc2=αk2+y2(E1E2)K11+K222K12) α 2 n e w , u n c = α 2 k + y 2 ( E 1 − E 2 ) K 11 + K 22 − 2 K 12 )
  3. 按照下式求出 αk+12 α 2 k + 1
    αk+12=Hαnew,unc2Lαnew,unc2>HLαnew,unc2Hα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
  4. 利用 αk+12 α 2 k + 1 αk+11 α 1 k + 1 的关系求出 αk+11 α 1 k + 1
  5. 按照4.3节的方法计算 bk+1 b k + 1 Ei E i
  6. 在精度e范围内检查是否满足如下的终止条件:
    i=1mαiyi=0 ∑ i = 1 m α i y i = 0

    0αiC,i=1,2...m 0 ≤ α i ≤ C , i = 1 , 2... m

    αk+1i=0yig(xi)1 α i k + 1 = 0 ⇒ y i g ( x i ) ≥ 1

    0<αk+1i<Cyig(xi)=1 0 < α i k + 1 < C ⇒ y i g ( x i ) = 1

    αk+1i=Cyig(xi)1 α i k + 1 = C ⇒ y i g ( x i ) ≤ 1
  7. 如果满足则结束,返回 αk+1 α k + 1 ,否则转到步骤2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值