SMO算法要解如下凸二次规划的对偶问题:
在这个问题中,变量是拉格朗日乘子,一个变量对应于一个样本点
。变量的总数等于训练样本的容量
。
SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的条件,那么这个最优化问题的解就得到了,因为
条件是该最优化问题的充分必要条件。于是,每次只选择两个变量进行优化,使其满足
条件,然后不断迭代,直至所有变量满足
条件,得到最优解。在优化变量的选取上,一般一个是违反
条件最严重的一个,另一个由约束条件自动决定。
两个变量二次规划的求解方法
根据SMO算法,公式(1)-(3)的问题可以通过多次选择变量,
,求解下列子问题得到:
上述优化问题,因为可以通过公式(5)可以用来表示
,所以可以考虑为对
的最优化问题。如果
,则
,
为常数:
根据公式(6),,
在正方形内部,加上公式(5),所以
,
为直线和正方形交线上的点。同理,如果
,则
,如下图:
假设问题(4)-(6)优化前,
的值为
,
,优化后的最优解为
,
,并且假设在沿着约束方向未经剪辑时
的最优解为
。
需要满足不等式
其中,和
是
所在对角线段的界,如果
,则
因为,所以
在直线
和正方形的交线段上,通过上下平移就能够得到上面
的界。同理,如果
,则
于是通过公式(5)得到用
的表示:
代入公式
并求导等于0便可以得到未经剪辑时的最优解
,最后根据上述
和
裁剪得到
。
最优化问题(4)-(6)沿着约束方向未经剪辑时的解是
其中,
是输入空间到特征空间的映射,
,
为
表示对输入的预测值与真实输出
之差,其中
经剪辑后的解是
然后根据公式
计算。
变量的选择方法
SMO算法每次都要选择两个变量进行优化,其中至少一个变量是违反条件的。
第一个变量的选择
SMO称选择第1个变量的过程为外层循环。外层循环在训练样本中选取违反条件最严重的样本点,并将其对应的变量作为第1个变量,具体的,检验训练样本点
是否满足
条件,即
其中,。
该检验是在范围内进行的。在检验过程中,外层循环首先遍历所有满足条件
的样本点,即间隔边界上的支持向量点,检验它们是否满足
条件,如果这些样本点都满足
条件,那么遍历整个训练集,检验它们是否满足
条件。
第二个变量的选择
SMO称选择第2个变量的过程为内层循环。第2个变量的选择标准是希望能使有足够大的变化。由于
所以的变化依赖于
。于是选择使
最大的
,当
是正的,选择最小的
作为
,如果
是负的,选择最大的
作为
,为了节省计算时间,将所有的
值保存在一个列表中。
如果这种内层循环找不到一个有足够下降的,则遍历在间隔边界上的支持向量点,依次将其对应的变量作为
试用,直到有足够的下降,如果还不可以,则遍历训练集。再不可以,换一个
。
计算阈值
和差值
更新完,
的值,都需要重新计算阈值
,当
时,由
条件可知
所以
由于未更新的为
移项得到
代入公式(15)得到的更新公式
同理,当时,可以推出
的更新公式
如果,
同时满足条件
,
,那么
,如果
,
是0或者
,那么
和
以及它们之间的数都是符合
条件的阈值,这时选择它们的中点作为
。
更新完,
后还需要更新对应的
值,并保存在列表中,
的更新需要用到
的值,以及所有支持向量对应的
:
其中是所有支持向量
的集合。
SMO算法
输入:训练数据集,其中
,
,
,精度
;
输出:近似解。
(1)选取初值,令
;
(2)选取优化变量,
,解析求解两个变量的最优化问题(4)-(6),求得最优解
,
其中
如果
如果
更新为
;
(3)若在精度范围内满足停机条件
其中
则转(4);否则令,转(2);
(4)取。