1.SMO概念
上一篇博客已经详细介绍了SVM原理(http://blog.csdn.net/luoshixian099/article/details/51073885),
为了方便求解,把原始最优化问题转化成了其对偶问题,因为对偶问题是一个凸二次规划问题,这样的凸二次规划问题具有全局最优解,如下:
αminΨ(α)=αmin21i=1∑Nj=1∑Nyi⋅yj⋅K(xi,xj)⋅αi⋅αj−i=1∑Nαi
0≤αi≤C,∀i,
i=0∑Nyi⋅αi=0
其中K(xi,xj)表示向量内积
其中:
(xi,yi):训练样本数据,
xi:样本特征
yi∈{−1,1}:为样本标签
C:惩罚系数
上述问题是要求解N个参数(α1,α2,α3,...,αN)
,其他参数均为已知,有多种算法可以对上述问题求解,但是算法复杂度均很大。
但1998年,由Platt提出的序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。
2.SMO原理分析
2.1视为一个二元函数
为了求解N个参数(α1,α2,α3,...,αN),首先想到的是坐标上升的思路,例如求解α1,可以固定其他N-1个参数,可以看成关于α1的一元函数求解,但是注意到上述问题的等式约束条件∑i=1Nyiαi=0,当固定其他参数时,参数α1也被固定,因此此种方法不可用。
SMO算法选择同时优化两个参数,
固定其他N-2个参数,假设选择的变量为α1,α2的二元函数,
Constant表示常数项,(不包含变量α1,α2的项)。
minΨ(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1v1α1+y2v2α2+Constant(1)
其中vi=∑j=3NαjyjK(xi,xj),i=1,2
2.2视为一元函数
3.由等式约束得:
α1y1+α2y2=−i=3∑Nαiyi=ζ
可见ζ为定值。
等式α1y1+α2y2=ζ两边同时乘以y1,且y12=1,得
α1=(ζ−y2α2)y1(2)
(2)式带回到(1)中得到只关于参数α2的一元函数,由于常数项不影响目标函数的解,以下省略掉常数项Constant
min Ψ(α2)=21K11(ζ−α2y2)2+21K22α22+y2K12(ζ−α2y2)α2−(ζ−α2y2)y1−α2+v1(ζ−α2y2)+y2v2α2(3)
2.3对一元函数求极值点
上式中是关于变量α2的函数,对上式求导并令其为0得:
∂α2∂Ψ(α2)=(K11+K22−2K12)α2−K11ζy2+K12ζy2+y1y2−1−v1y2+v2y2=0
1.由上式中假设求得了α2的解,带回到(2)式中可求得α1的解,分别记为:
α1new,α2new
优化前的解记为:
α1old,α2old,
由于参数α3,α4,...,αN固定,由等式约束
∑i=1Nyiαi=0有:
α1oldy1+α2oldy2=−i=3∑Nαiyi=α1newy1+α2newy2=ζ
ζ=α1oldy1+α2oldy2(4)
2.假设SVM超平面的模型为f(x)=wTx+b,
3.上一篇中已推导出w的表达式,将其带入得
f(x)=i=1∑NαiyiK(xi,x)+b
f(xi):表示样本xi的预测值
yi表示样本xi的真实值,定义Ei表示预测值与真实值之差为
Ei=f(xi)−yi(5)
3.由于vi=∑j=3NαjyjK(xi,xj),i=1,2因此,
v1=f(x1)−j=1∑2yjαjK1j−b(6)
v2=f(x2)−j=1∑2yjαjK2j−b(7)
把(4)(6)(7)带入下式中:
(K11+K22−2K12)α2−K11ζy2+K12ζy2+y1y2−1−v1y2+v2y2=0
化简得: 此时求解出的α2new未考虑约束问题,先记为α2new,unclipped:
(K11+K22−2K12)α2new,unclipped=(K11+K22−2K12)α2old+y2[y2−y1+f(x1)−f(x2)]
代入(5)式,并记η=K11+K22−2K12:
α2new,unclipped=α2old+ηy2(E1−E2)(8)
2.4对原始解修剪
上述求出的解未考虑到约束条件:
0≤αi=1,2≤C
α1⋅y1+α2⋅y2=ζ
在二维平面上直观表达上述两个约束条件 :

最优解必须要在方框内且在直线上取得,因此
L≤α2new≤H
当y1̸=y2时,
L=max(0,α2old−α1old);
H=min(C,C+α2old−α1old)
当y1=y2时,
L=max(0,α1old+α2old−C);
H=min(C,α2old+α1old)
经过上述约束的修剪,最优解就可以记为α2new了.
α2new=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧ H ,α2new,unclipped>Hα2new,unclipped,L⩽α2new,unclipped⩽H L ,α2new,unclipped<L
2.5求解α1new
由于其他N-2个变量固定,因此
α1oldy1+α2oldy2=α1newy1+α2newy2
所以可求得:
α1new=α1old+y1y2(α2old−α2new)(9)
2.6取临界情况
大部分情况下,有η=K11+K22−2K12>0。
但是在如下几种情况下,α2new需要取临界值L或者H.
1.η<0,当核函数K不满足Mercer定理时,矩阵K非正定;
2.η=0,样本x1与x2输入特征相同;
也可以如下理解,对(3)式求二阶导数就是
η=K11+K22−2K12
当η<0时,目标函数为凸函数,没有极小值,极值在定义域边界处取得。
当η=0时,目标函数为单调函数,同样在边界处取极值。
计算方法:
即当α2new=L和α2new=H分别代入(9)式中,
计算出α1new=L1和α1new=H1,其中s=y1y2
L1=α1+s(α2−L)
H1=α1+s(α2−H)
代入目标函数(1)内,比较Ψ(α1=L−1,α2=L)与Ψ(α1=H1,α2=H)的大小,α2取较小的函数值对应的边界点.
ΨL=L1f1+Lf2+21L12K(x1,x1)+21L2K(x2,x2)+sLL1K(x1,x2)
ΨH=H1f1+Hf2+21H12K(x1,x1)+21H2K(x2,x2)+sHH1K(x1,x2)
其中:
f1=y1(E1−b)−α1K(x1,x1)−sα2K(x1,x2)
f2=y2(E2−b)−sα1K(x1,x2)−α2K(x2,x2)
3.启发式选择变量
上述分析是在从N个变量中已经选出两个变量进行优化的方法,下面分析如何高效地选择两个变量进行优化,使得目标函数下降的最快。
第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT条件的ai作为第一个变量,接着依据相关规则选择第二个变量(见下面分析),对这两个变量采用上述方法进行优化。
当遍历完整个样本集后,遍历非边界样本集(0<αi<C)中违反KKT的αi作为第一个变量,同样依据相关规则选择第二个变量,对此两个变量进行优化。
当遍历完非边界样本集后,再次回到遍历整个样本集中寻找,即在整个样本集与非边界样本集上来回切换,寻找违反KKT条件的αi作为第一个变量。直到遍历整个样本集后,没有违反KKT条件αi,然后退出。
边界上的样本对应的αi=0或者αi=C,在优化过程中很难变化,然而非边界样本0<αi<C
会随着对其他变量的优化会有大的变化。
KKT条件
αi=0⇒y(i)(wTx(i)+b)≥1
αi=C⇒y(i)(wTx(i)+b)≤1
0<αi<C⇒y(i)(wTx(i)+b)=1
第二个变量的选择
SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为α1,二个变量的选择希望能使α2有较大的变化,由于α2是依赖于
∣E1−E2∣,当E1为正时,那么选择最小的Ei作为E2,如果Ei为负,选择最大Ei作为E2,通常为每个样本的Ei保存在一个列表中,选择最大的∣E1−E2∣来近似最大化步长。
有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:
首先在非边界集上选择能够使函数值足够下降的样本作为第二个变量,
如果非边界集上没有,则在整个样本集上选择第二个变量,
如果整个样本集依然不存在,则重新选择第一个变量。
4.阈值b的计算
5.每完成对两个变量的优化后,要对b的值进行更新,因为b的值关系到f(x)的计算,即关系到下次优化时Ei的计算
1.如果0<α1new<C,
由KKT条件y1(wTx1+b)=1,得到∑i=1NαiyiKi1+b=y1,由此得:
b1new=y1−i=3∑NαiyiKi1−α1newy1K11−α2newy2K21
由(5)式得,上式前两项可以替换为:
y1−i=3∑NαiyiKi1=−E1+α1oldy1K11+α2oldy2K11+bold
得出:
b1new=−E1−y1K11(α1new−α1old)−y2K21(α2new−α2old)+bold
2.如果0<α2new<C,则
b2new=−E2−y1K12(α1new−α1old)−y2K22(α2new−α2old)+bold
3.如果同时满足0<αinew<C,则b1new=b2new
4.如果同时不满足0<αinew<C,则b1new与b2new以及它们之间的数都满足KKT阈值条件,这时选择他们的中点