0. 引言
SMO(Sequential Minimal Optimization)是高效实现SVM(Support Vector Machine)的最常见算法。首先简单介绍下SVM方法。
1.支持向量机SVM
对于需要划分类别的n维样本空间中,需要划一条n-1维的超平面(3维及以上)来划分样本类别。这个超平面可以通过以下线性方程来描述:
,
其中w为法向量w=(w1;w2;w3……)
如图下图,定义y(x)=0时为该超平面,y(x)=-1和y(x)=1分别为与训练集相交的超平面,其中相交的训练集元素焦叫做支持向量。这里定义一个概念:间隔(margin),是指y(x)=-1和y(x)=1两个超平面的间距,表达式为:r = 2/||w||。 SVM问题就是找到约束参数w和b使得r取得最大值(b为隐式约束)。用数学式表达如下:
2.SMO支持向量机SVM
那么问题来了,直接求以上w,b问题比较复杂,这里引入了拉格朗日乘子a,这就是著名的SMO算法,于是改写SVM问题如下:
,其中an为向量,且大于等于零(拉格朗日约束)。
再对L求w和b的偏导可得:
:w的偏导,带入拉格朗日函数L,可以消去w和b,目的是对w最小化L
:b的偏导,用作后续解题的约束条件,目的是对b最小化L
由w的偏导函数带入拉格朗日函数后得到以下函数,这是一个对偶问题的二次规划表达函数,记作式子La:
,只需要找到向量a=(a0到an)使得式子La取最大值即可。
SMO在求解SVM问题时就不断迭代以下两件事情:
1. 选取一对参数an和am,先选取其中一个,将另一个学做关于它的表达式,带入目标函数求解
2. 固定an,am以外的参数,求解对偶问题的二次规划表达函数,并获得更新后的an,am
在求式子La的最大值必须要满足KKT约束条件:
,违背KTT条件的解必定不是最优解,在an,am迭代过程中违背KTT程度越大,说明这次迭代后得到的an,am优化结果更明显。于是这里引入了一个trick,在选取an后,选择使得两个变量对应样本之间最大间隔的变量作为第二个变量,换句话说两个变量差别越大会给La式子更大的变化。其中间隔可以这么定义:
我们要找的am也就是使得|Em-En|最大时的参数。