支持向量机原理(四)

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

1. 回顾SVM优化目标函数

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

minα 12i=1,j=1mαiαjyiyjK(xi,xj)i=1mαi

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

0αiC

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

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

αi= Cyi(wϕ(xi)+b) 1

  由于w=j=1mαjyjϕ(xj),我们令g(x)=wϕ(x)+b=j=1mαjyjK(x,xj)+b,则有:
αi=0yig(xi)  1

0<αi <C yig(xi)  = 1

αi= Cyig(xi)  1

2. SMO算法的基本思想

  上面这个优化式子比较复杂,里面有m个变量组成的向量α需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于i=1mαiyi=0.假如将α3,α4,...,αm 固定,那么α1,α2之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。
  为了后面表示方便,我们定义Kij=ϕ(xi)ϕ(xj)
  由于α3,α4,...,αm都成了常量,所有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成下式:

minα1,α112K11α12+12K22α22+y1y2K12α1α2(α1+α2) +y1α1i=3myiαiKi1+y2α2i=3myiαiKi2

s.t.α1y1+ α2y2=i=3myiαi=ς

0αiCi=1,2

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

  为了求解上面含有这两个变量的目标优化问题,我们首先分析约束条件,所有的α1,α2都要满足约束条件,然后在约束条件下求最小。
  根据上面的约束条件α1y1+α2y2=ς0αiCi=1,2,又由于y1,y2均只能取值1或者-1, 这样α1,α2在[0,C]和[0,C]形成的盒子里面,并且两者的关系直线的斜率只能为1或者-1,也就是说α1,α2的关系直线平行于[0,C]和[0,C]形成的盒子的对角线,如下图所示:

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

  由于α1,α2的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上仅仅是一个变量的优化问题。不妨我们假设最终是α2的优化问题。由于我们采用的是启发式的迭代法,假设我们上一轮迭代得到的解是α1old,α2old,假设沿着约束方向α2未经剪辑的解是α2new,unc.本轮迭代完成后的解为α1new,α2new
  由于α2new必须满足上图中的线段约束。假设L和H分别是上图中α2new所在的线段的边界。那么很显然我们有:

Lα2newH

  而对于L和H,我们也有限制条件如果是上面左图中的情况,则
L=max(0,α2oldα1old)H=min(C,C+α2oldα1old)

  如果是上面右图中的情况,我们有:
L=max(0,α2old+α1oldC)H=min(C,α2old+α1old)

  也就是说,假如我们通过求导得到的α2new,unc,则最终的α2new应该为:
α2new={Hα2new,unc >Hα2new,uncLα2new,unc HLα2new,unc<L

  那么如何求出α2new,unc呢?很简单,我们只需要将目标函数对α2求偏导数即可。首先我们整理下我们的目标函数,为了简化叙述,我们令
Ei=g(xi)yi=j=1mαjyjK(xi,xj)+byi

  其中g(x)就是我们在第一节里面的提到的
g(x)=wϕ(x)+b=j=1mαjyjK(x,xj)+b

  我们令
vi=i=3myjαjK(xi,xj)=g(xi) i=12yjαjK(xi,xj)b

  这样我们的优化目标函数进一步简化为:
W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2(α1+α2) +y1α1v1+ y2α2v2

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

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

  忙了半天,我们终于可以开始求α2new,unc了,现在我们开始通过求偏导数来得到α2new,unc
Wα2=K11α2+ K22α22K12α2 K11ς y2+K12ς y2+y1y21v1y2+y2v2=0

  整理上式有:
(K11+K222K12)α2=y2(y2y1+ς K11 ς K12+v1v2)

= y2(y2y1+ς K11 ς K12+(g(x1) j=12yjαjK1jb)(g(x2) j=12yjαjK2jb))

  将ς=α1y1+α2y2带入上式,我们有:
(K11+K222K12)α2new,unc=y2((K11+K222K12)α2oldy2+y2y1+g(x1)g(x2))

=(K11+K222K12) α2old+y2(E1E2)

  我们终于得到了α2new,unc的表达式:
α2new,unc=α2old+y2(E1E2)K11+K222K12

  利用上面讲到的α2new,uncα2new的关系式,我们就可以得到我们新的α2new了。利用α2newα1new的线性关系,我们也可以得到新的α1new

4. SMO算法两个变量的选择

  SMO算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?

4.1 第一个变量的选择

  SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点。对于每个样本点,要满足的KKT条件我们在第一节已经讲到了:

αi=0yig(xi)1

0<αi<Cyig(xi)=1

αi=Cyig(xi)1

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

4.2 第二个变量的选择

  SMO算法称选择第二一个变量为内层循环,假设我们在外层循环已经找到了α1, 第二个变量α2的选择标准是让|E1E2|有足够大的变化。由于α1定了的时候,E1也确定了,所以要想|E1E2|最大,只需要在E1为正时,选择最小的Ei作为E2, 在E1为负时,选择最大的Ei作为E2,可以将所有的Ei保存下来加快迭代。
  如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做α2,直到目标函数有足够的下降, 如果所有的支持向量做α2都不能让目标函数有足够的下降,可以跳出循环,重新选择α1

4.3 计算阈值b和差值Ei

  在每次完成两个变量的优化之后,需要重新计算阈值b。当0α1newC时,我们有

y1i=1mαiyiKi1b1=0

  于是新的b1new为:
b1new=y1i=3mαiyiKi1α1newy1K11α2newy2K21

  计算出E1为:
E1=g(x1)y1=i=3mαiyiKi1+α1oldy1K11+α2oldy2K21+boldy1

  可以看到上两式都有y1i=3mαiyiKi1,因此可以将b1newE1表示为:
b1new=E1y1K11(α1newα1old)y2K21(α2newα2old)+bold

  同样的,如果0<α2new<C, 那么有:
b2new=E2y1K12(α1newα1old)y2K22(α2newα2old)+bold

  最终的bnew为:
bnew=b1new+b2new2

  得到了bnew我们需要更新Ei:
Ei=SyjαjK(xi,xj)+bnewyi

  其中,S是所有支持向量xj的集合。

5. SMO算法总结

  输入是m个样本(x1,y1),(x2,y2),...,(xm,ym),,其中x为n维特征向量。y为二元输出,值为1,或者-1.精度e。输出是近似解α

  1. 取初值α0=0,k=0
  2. 按照4.1节的方法选择α1k,接着按照4.2节的方法选择α2k,求出新的α2new,unc
    α2new,unc=α2k+y2(E1E2)K11+K222K12)
  3. 按照下式求出α2k+1
    α2k+1={Hα2new,unc>Hα2new,uncLα2new,uncHLα2new,unc<L
  4. 利用α2k+1α1k+1的关系求出α1k+1
  5. 按照4.3节的方法计算bk+1Ei
  6. 在精度e范围内检查是否满足如下的终止条件:
    i=1mαiyi=0

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

    αik+1=0yig(xi)1

    0<αik+1<Cyig(xi)=1

    αik+1=Cyig(xi)1
  7. 如果满足则结束,返回αk+1,否则转到步骤2

相关文章:

  • 2021-05-09
  • 2022-02-24
  • 2021-12-23
  • 2021-12-17
  • 2021-10-14
  • 2021-11-05
  • 2021-11-30
猜你喜欢
  • 2021-07-10
  • 2021-04-29
  • 2021-09-26
  • 2021-11-15
  • 2021-04-22
  • 2021-12-24
  • 2021-04-25
相关资源
相似解决方案