SMO优化算法
机器学习基础
SVM
http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html
http://blog.csdn.net/xuanyuansen/article/details/41153023
1. SMO简介
SMO算法(Sequential minimal optimization)由Microsoft Research的John C. Platt 在1998年提出, 并成为最快的二次规划优化算法, 特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。
对于SVM的对偶问题, 数据集{(xi,yi)}, 要求解α1,⋯,αn上求最大值W(α)二次规划问题:
minαs.t.W(α)=∑inαi−12∑i,j=1nyiyjαiαj<xi,xj>0≤αi≤C∑inyiαi=0, i=1,⋯,n(1)
2. SMO的更新公式推导
2.1 步骤一:视为一个二元函数
求解α1,⋯,αn, 思路如下:
- 按照坐标上升法(目标求最大值), 可固定除αi以外的所有的α, 然后在αi上求极值.
- 然而, 对于SVM, 由于约束条件∑nk=1ykαk=0. 如果固定其他的α, 那么αi将不是变量.
因此, SMO算法需要同时选择两个α进行同时更新, 比如αi和αj, 固定其他参数. 又由于
yiαi+yjαj=−∑k=3lykαk=ϵ,(2)
可以简化目标函数W(α)为只关于αi和αj的二元函数, Const
表示常数项(不包含αi和αj).
minΨ(αi,αj)=12Kiiα2i+12Kjjα2j+yiyjKijαiαj−(αi+αj)+yiviαi+yjvjαj+Const(3)
其中,
vk=∑Nl≠i,jαjyjK(xk,xl), k=i,j.
2.2 步骤二: 视为一元函数
等式约束(2), 其中ϵ在某步迭代中可视为常数. 在等式两边乘以yi, 且y2i=1, 然后, 将上式用αi用αj表示, 得
αi=(ϵ−yjαj)yi
并代回到(3)中, 得
minΨ(αj)=12Kii(ϵ−αjyj)2+12Kjjα2j+yiKij(ϵ−αjyj)αj−(ϵ−yjαj)yi−αj+vi(ϵ−yjαj)+yjvjαj+Const(4)
2.3 对一元函数Ψ求极值点
对Ψ式(4)关于αj求导,并令其为0. 可求得αj的更新解析解.
∂Ψ(α2)∂α2=(Kii+Kjj−2Kij)αj−K11ζy2+K12ζy2+y1y2−1−v1y2+v2y2=0
具体的算法步骤描述如下:

- 使用启发式算法选择更新的αi和αj对, 使得目标值更新, 最大程度的向全局最优值逼近.
- 固定其他参数, W(α)关于αi和αj求导, 得到子问题的极值. [而αj又可由αi表示]
- SMO之所以高效就是因为在固定其他参数后,对一个参数优化过程很高效.
3. SMO的变量α上界和下界
由(2)可知,
yiαi+yjαj=ϵ(5)
以及
0≤α≤C(6)
当yi和yj异号时, 如-1和+1. 有αi−αj=ϵ 或 αj−αi=ϵ.
对于αi−αj=ϵ情况, 有αi=αj+ϵ.
对于αi的下界, 当αj=0取得. 故, Lαi=max{0,ϵ}=max{0,αi−αj}.
对于αi的上界, 当αj=C取得. 故, Hαi=min{C,ϵ+C}=min{0,αi−αj+C}.
对于αj−αi=ϵ情况, 有αi=αj−ϵ.
对于αi的下界, 当αj=0取得. 故, Lαi=max{0,−ϵ}=max{0,αi−αj}.
对于αi的上界, 当αj=C取得. 故, Hαi=min{C,−ϵ+C}=min{0,αi−αj+C}.
当yi和yj同号时, 如都为+1或-1. 有αi+αj=ϵ 或 αj+αi=−ϵ.
对于αi+αj=ϵ情况, 有αi=ϵ−αj.
对于αi的下界, 当αj=C取得. 故, Lαi=max{0,ϵ−C}=max{0,αi+αj−C}.
对于αi的上界, 当αj=0取得. 故, Hαi=min{C,ϵ}=min{0,αi+αj}.
对于αi+αj=−ϵ情况, 有αi=−ϵ−αj.
对于αi的下界, 当αj=C取得. 故, Lαi=max{0,−ϵ−C}=max{0,αi+αj−C}.
对于αi的上界, 当αj=0取得. 故, Hαi=min{C,−ϵ}=min{0,αi+αj}.