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=⎩⎪⎪⎪⎪⎪+α2old−C);
H=min(C,α2old+α1old)
经过上述约束的修剪,最优解就可以记为
α2new了.
α2new=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪