SMO算法主要是为优化SVM(支持向量机)的求解而产生的,SVM的公式基本上都可以推到如下这步:
maxα∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjmax_{\alpha}\sum_{i=1}^{m}\alpha_{i}-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}^{T}x_{j}maxα∑i=1mαi−21∑i=1m∑j=1mαiαjyiyjxiTxj
s.t.∑imαiyi=0s.t. \sum_{i}^{m}\alpha_{i}y_{i}=0s.t.∑imαiyi=0
0≤αi≤C,i=1,2,3,...,m0≤\alpha_{i}≤C,i = 1, 2, 3,...,m0≤αi≤C,i=1,2,3,...,m
其中,C是SVM中惩罚参数(或正则化常数),可令:
φ(α)=∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxj\varphi(\alpha)=\sum_{i=1}^{m}\alpha_{i}-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}^{T}x_{j}φ(α)=∑i=1mαi−21∑i=1m∑j=1mαiαjyiyjxiTxj
SMO的具体步骤:
第一步:为了满足∑imαiyi=0\sum_{i}^{m}\alpha_{i}y_{i}=0∑imαiyi=0公式,首先要固定两个变量αi和αj\alpha_{i}和\alpha_{j}αi和αj,这里以α1和α2\alpha_{1}和\alpha_{2}α1和α2为例,其余的αi(i=3,4,...,m)都是已知量\alpha_{i}(i=3,4,...,m)都是已知量αi(i=3,4,...,m)都是已知量,则约束条件变成:
α1y1+α2y2=c=−∑i=3mαiyi,(0≤α1≤C,0≤α2≤C)\alpha_{1}y_{1}+\alpha_{2}y_{2}=c=-\sum_{i=3}^{m}\alpha_{i}y_{i},(0≤\alpha_{1}≤C,0≤\alpha_{2}≤C)α1y1+α2y2=c=−∑i=3mαiyi,(0≤α1≤C,0≤α2≤C)
两边同乘y1y_{1}y1,并记y1y2=h0y_{1}y_{2}=h_{0}y1y2=h0得:
α1+h0α2=−y1∑i=3mαiyi=α1new+h0α2new\alpha_{1}+h_{0}\alpha_{2}=-y_{1}\sum_{i=3}^{m}\alpha_{i}y_{i}=\alpha_{1_{new}}+h_{0}\alpha_{2_{new}}α1+h0α2=−y1∑i=3mαiyi=α1new+h0α2new
令H=−y1∑i=3mαiyiH=-y_{1}\sum_{i=3}^{m}\alpha_{i}y_{i}H=<