《最优化理论与算法》超详细学习笔记 (六)————序列最小化算法SMO 支持向量机SVM
相关链接:支持向量机SVM
什么是SMO算法以及基本思路
序列最小化(SMO)算法是一种解决二次优化问题的算法,其最经典的应用就是在解决SVM问题上。SVM推导到最后,特别是使用了拉格朗日因子法求解之后便不难发现其最终等效为一个二次规划问题。为了解决普通二次规划算法计算量大的问题,1998年John Platt发布了一个称为SMO的强大算法,用于训练SVM分类器。
我们看到SVM最终所需要解决的目标函数:
αmins.t.21i,j=1∑αiαjyiyjκ(xi,xj)−i=1∑αi0≤αi≤C,i=1,…,ni=1∑nαiyi=0
所求的是
α=(α1,α2,⋯,αn),样本集的样本容量
n越大,所需要求的参数
αi越多。
一下子求出成百上千个参数的值可想而知是非常困难而且计算量巨大,SMO算法的思路是一次只求两个变量,固定其他变量,以此类推,直至求出所有变量。
大致求解步骤为:
- 设定
α的初始值为0.
- 按一定的规则选取两个变量,例如
α1,α2,固定其他
αi
- 优化
α1,α2,满足约束条件后,选取另外两个变量,如
α3,α4.
- 依此类推,直至所有变量都已经求出
SMO具体求解思路
以
α1,α2求解过程为例:
此时其他的
αi可以看作常数,则求和符号展开后,省略掉常数项,得:
α1,α2minW(α1,α2)=21K11α12+21K22α22+y(1)y(2)K12α1α2−(α1+α2)+y1α1i=3∑NyiαiKi1+y2α2i=3∑NyiαiKi2
s.t.α1y1+α2y2=−i=3∑Nαiyi=c
0≤αi≤C,i=1,2
其中
Kij=κ(xi,xj).
由于存在约束
α1y1+α2y2=c,所以上式可以看作一个一元二次方程,可以很容易求出未考虑约束的最优解
α1new,unc,α2new,unc
那么是如何进行迭代的呢?
由于
y的取值为1或-1,所以当
y1=y2时,
α1+α2=c;
y1=y2时,
α1+α2=c
接下来:
令
g(x)=i=3∑NyiαiK(xi,x)+b
Ei=g(xi)−yi
其中
g(xi)表示预测值,
Ei表示偏差
可以得到:
α2new,unc=α2old+ηy2(E1−E2)
其中
η=K11+K22−2K12=∥Φ(x1)−Φ(x2)∥2
经约束后的解是
α2new=⎩⎨⎧H,α2new,unc,L,L≤α2new,uncα2new,unc≤Hα1new=α1old+y1y2(α2old−α2new)
其中
当
y1=y2
L=max(0,α2old−α1old),H=min(C,C+α2old−α1old)
当
y1=y2
L=max(0,α2old+α1old−C),H=min(C,α2old+α1old)
变量选取
启发式策略:
- 第一个变量
第一个变量的选择为外层循环,先选取违反KKT条件最严重的样本点。
- 第二个变量
进行第二个变量的选择为内层循环,为了加快
α2的迭代速度,应使其对应的
∣E1−E2∣最大。