SMO算法的极简数学推导

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为隐式约束)。用数学式表达如下:


SMO算法的极简数学推导_第1张图片

2.SMO支持向量机SVM

那么问题来了,直接求以上w,b问题比较复杂,这里引入了拉格朗日乘子a,这就是著名的SMO算法,于是改写SVM问题如下:

,其中an为向量,且大于等于零(拉格朗日约束)。

再对L求w和b的偏导可得:

:w的偏导,带入拉格朗日函数L,可以消去w和b,目的是对w最小化L

:b的偏导,用作后续解题的约束条件,目的是对b最小化L

由w的偏导函数带入拉格朗日函数后得到以下函数,这是一个对偶问题的二次规划表达函数,记作式子La:

,只需要找到向量a=(a0an)使得式子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|最大时的参数。












你可能感兴趣的:(机器学习,math)