全称:序列最小最优化算法(sequential minimal optimization)
推导
已知 SVM 的目标函数为:
minα21i=1∑Nj=1∑NαiαjyiyjK(xi,xj)−i=1∑Nαis.t.i=1∑Nαiyi=00≤αi≤C,i=1,2,...,N
由约束条件可知,对两个变量 α1,α2,有:
α1y1+α2y2=−i=3∑Nαnyn
令等式右边为一个常数 k(自己设),再将 α2 用 α1 表示,则原始问题变成单变量二次规划问题的解。
将原始问题表示成由 α1,α2 表示的表示式,如下所示:
原式=21α12K11+21α22K22+y1y2K12α1α2−(α1+α2)+y1α1i=3∑NyiαiKi1+y2α2i=3∑NyiαiKi2+21i=3∑Nj=3∑NαiαjyiyjKij−i=3∑Nαi
其中令最后两项 21∑i=3N∑j=3NαiαjyiyjKij−∑i=3Nαi=constant,令 vi=∑j=3NyjαjKij,
那么
原式=21α12K11+21α22K22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2+constant
将 α1 用 α2 表示,再带入原式:
minΦ(α2)=21(k−y2α2)2K11+21α22K22+y2K12(k−y2α2)α2−(k−y2α2)y1−α2+(k−y2α2)v1+y2α2v2
求偏导:
∂α2∂Φ(α2)=(K11+K22−2K12)α2−K11ky2+K12ky2+y1y2−1−v1y2+v2y2=0
令
f(x)=i=1∑NαiyiK(xi,x)+b
那么:
v1=f(x1)−j=1∑2yjαjK1j−bv2=f(x2)−j=1∑2yjαjK2j−b
将 k=α1y1+α2y2带入上述偏导式:
(K11+K22−2K12)α2new,unc=y2((K11+K22−2K12)α2oldy2+y2−y1+f(x1)−f(x2))
其中alpha2new,unc 代表优化后的未裁剪的α2,对应优化前的 α2old。
令:
误差 Ei=f(xi)−yi,η=K11+K22−2K12
那么:
α2new,unc=α2old+ηy2(E1−E2)
因为 αi≤C, 所以 α1,α2 的约束可以表示成如下两个图形:

原本的约束为:0≤αi≤C, 现在变为 L≤αi≤H.
L, H分别为上图中 α2 的两个边界点。
若 y1̸=y2,则:
L=max(0,α2old−α1old),H=min(C,C+α2old−α1old)
若 y1=y2, 则:
L=max(0,a2old+α1old−C),H=min(C,α2old+α1old)
那么经剪辑后:
α2=⎩⎪⎨⎪⎧H, α2new,unc>Halpha2new,unc, L≤α2new,unc≤HL, α2new,unc<H
由 α1oldy1+α2old=α1newy1+α2new ,得:
α1new=α1old+y1y2α2new
有了变量的求解公式之后,就是如何选择变量了。
首先要理解 smo 算法的思路:如果所有变量都满足 KKT 条件,那么最优化问题的解就得到了。(关于 kkt 条件,可以看这篇文章:http://jacoxu.com/最优化理论与kkt条件/)
那么在我们选择的两个变量中,至少有一个是违反 kkt 条件的。对另一个变量,我们希望它是目标函数值减小得最快,但这样比较复杂,第二个变量的选择标准是能够有足够大的变化。
因为 α2 依赖于 ∣E1−E2∣,所以选择使 ∣E1−E2∣ 变化最大的 α2。
计算 b 值
每次完成优化后,都要重新计算 b。
当 0<α1new<C 时,满足 yif(xi)=1(此时所有满足条件的点为支持向量),即:
i=1∑NαiyiKi1+b=y1
b1new=y1−i=3∑NαiyiKi1−α1newy1K11−α2newy2K21
又:
E1=f(x1)−y1=i=3∑NαiyiKi1+α1newy1K11+α2newy2K21+bold−y1
所以:
b1new=−E1−y1K11(α1new−α1old−y2K21(α2new−α2old)+bold)
同理可得 b2new。
对求得的所有 bi求平均值。
先写到这里,并不完善,待更新。。。
参考:
周志华 《机器学习》
李航 《统计学习方法》
https://blog.csdn.net/luoshixian099/article/details/51227754