1.求解SVM参数λ使用SMO算法(序列最小化)
2.SMO算法的思想是每次只优化两个变量,将其他的变量都视为常数
3.初始置所有样本参数λ为0,超平面常数项b为0
4.每次迭代优先选择违反KKT条件的点,每次迭代更新两个参数λ
5.一轮迭代后,检查所有点是否满足约束条件,满足则停止迭代,输出参数λ,否则进入下一轮迭代
我们在介绍了硬间隔、软间隔、核映射三种情形,以及最终它们的决策平面。但我们还有一个问题没有解决,就是参数λ没有求解,最终的决策平面也需要求解该参数得到。本篇我们介绍求解该参数的算法——SMO算法(Sequential Minimal Optimization)
以核映射分类器为例介绍该算法求解过程。首先回顾最后我们需要优化的问题:
以及根据KKT条件我们推导出如下关系:
算法思想
SMO,顾名思义,就是序列最小化,它的算法思想是:每次只优化两个变量,将其他的变量都视为常数。将一个复杂的优化算法转化为一个比较简单的两变量优化问题。
为了方便推导,我们简化记号:
不失一般性,假设要优化的参数是λ1,λ2,其他参数固定,则有:
去掉常数项,最终需要优化的函数是:
确定参数范围
目标是找出λ1,λ2组合,使得目标函数值最小,y只有-1,+1取值,根据约束条件,我们分情况讨论。
y1和y2取值符号不同
我们可以看到,这两种情况在取相反的k值情况下是等价的:
因此,不失一般性,我们只讨论λ1=λ2+k的情况
因此,
当k>0,λ1的范围是(k,C)=(λ1-λ2,C)
当k<0,λ1的范围是(0,C+k)=(0,C+λ1-λ2)
若通过迭代方法求解λ1,则λ1下一轮的下界和上界为:
下一轮λ1更新范围是
y1和y2取值符号相同
同样的,我们有
不失一般性,只讨论λ1=-λ2+k的情况
当0<k<C,λ1的范围是(0,k)=(0,λ1+λ2)
当k>C,λ1的范围是(k-C,C)=(λ1+λ2-C,C)
当k<0,不满足约束条件
若通过迭代方法求解λ1,则λ1下一轮的下界和上界为:
下一轮λ1更新范围是
综上,假设我们下一轮得到未加约束的λ1(unc),则最终λ1(new)取值为
参数迭代公式
我们可以用λ1来表示λ2:
为了简化目标,我们记
代入目标函数,并对λ1求导,我们可以得到:
具体推导过程如下:
E还可以化简:
我们通过E2-E1发现:
也即得到λ1的迭代公式:
变量选择
λ1的迭代公式也得到,接下来剩下最后一个问题,就是怎么选择合适的两个初始变量值。
实际上,第一个变量的选择参数利用了文章一开始给出的结论:
选择在训练集中违反KKT条件最严重的样本点。
具体的,首先选择违反yg(x)=1(0<λ<C)的点,如果支持向量都满足该条件,再选择违反yg(x)≥1(λ=0)和yg(x)≤1(λ=C)的点。
在第一个变量λ2选择好的情况下,第二个变量λ1的选择的标准是尽可能使得|E2-E1|足够大。因为λ2已选择好,所以E2也确定(上一轮迭代结果已得到),接着从所有Ei选出使得|E2-E1|最大的点对应的λ参数,置为λ1。在每次完成两个变量的优化后,阈值b也要重新计算:
于是有
同理可得:
这样我们得到新的b
这样我们最终得到了更新的E
算法总结
SMO算法实在是复杂,我们总结一下流程:
参考资料:
https://www.cnblogs.com/techflow/p/13710893.html
https://www.cnblogs.com/pinard/p/6111471.html