版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31823267/article/details/89135160
项目地址:https://github.com/Daya-Jin/ML_for_learner/blob/master/svm/SMO.ipynb
原博客:https://daya-jin.github.io/2019/03/24/SequentialMinimalOptimization/
算法概述
在之前讲解SVM博客中,分析了SVM模型的理论基础与优化目标,并且讨论了SVM在达到最优解时的一些性质。但是前文中并没有提及SVM目标函数的优化方法,本文的目的就是讨论二次优化算法SMO用于SVM的学习。因为SMO算法涉及到的很多数学知识已超出本文范畴,某些地方只给出直接结论。
首先回顾SVM的优化目标为:
λmin L(λ)s.t. =21i=1∑mj=1∑mλiλjyiyjxixjT−i=1∑mλi0≤λi≤C, ∑λiyi=0
为了将核函数加入进来,将目标函数中两训练样本的内积替换成核函数的形式:
λmin L(λ)s.t. =21i=1∑mj=1∑mλiλjyiyjκij−i=1∑mλi0≤λi≤C, ∑λiyi=0
SMO算法的核心思想是:每次只选取一对参数进行优化。假设在上述目标中,我们只令
λa与
λb为参数,其他
λ为常数,那么优化问题可以写成:
λa,λbmins.t. 21λa2y(a)2κaa+21λb2y(b)2κbb+21λayai̸=a∑λiyiκai+21λbybi̸=b∑λiyiκbi−λa−λb−i̸=a,b∑λi0≤λa,b≤C, λaya+λbyb=−i̸=a,b∑λiyi
去除无关常量,简化后的优化目标可以写成:
λa,λbmins.t. 21λa2κaa+21λb2κbb+21λayai̸=a∑λiyiκai+21λbybi̸=b∑λiyiκbi−λa−λb0≤λa,b≤C, λaya+λbyb=−i̸=a,b∑λiyi
在前文中提过SVM在优化后的一些性质,如对于分类正确的样本,其对应的
λi是等于
0的,同样的,那么对于软间隔SVM,不难推出优化后的几个性质:
样本分类情况 |
对应的
λ |
yi(xiθT+θ0)≥1 |
λi=0 |
yi(xiθT+θ0)≤1 |
λi=C |
yi(xiθT+θ0)=1 |
0<λi<C |
优化策略
SMO每次只选取一对
λ视为参数,假设先选定
λa,那么
λb的优化公式为:
λb:=λb−2κab−κaa−κbbyb((y^a−ya)−(y^b−yb))=λb−ηyb(Ea−Eb)
然后再看优化问题中的约束条件
λaya+λbyb=−i̸=a,b∑λiyi,由于只有
λa与
λb是参数,那么该优化条件还可以写成:
λaya+λbyb=ξ。而
ya与
yb的可能取值为
{−1,+1},由几何方法可以得到优化参数
λ的一个上下界:
- 若
ya̸=yb,
L=max(0,λb−λa),
H=min(C,C+λb−λa)
- 若
ya=yb,
L=max(0,λa+λb−C),
H=min(C,λb+λa)
所以,在优化之后,还需要检验
λb是否还符合约束条件,若不满足,则需要做截断处理:
λb=⎩⎪⎨⎪⎧HλbLif λb>Hif L<λb<Hif λb<L
而
λa的优化公式为:
λa:=λa−yaybΔλb
其中
Δλb=λbnew−λbold。
针对任一一个
λ,若
λ在边界范围
(0,C)内,可以推出对应的
θ0,k:
θ0,k=θ0−Ek−yaΔλaκak−ybΔλbκkbk=a,b
那么将其写成一个条件函数,可得到
θ0的迭代优化公式:
θ0:=⎩⎪⎨⎪⎧θ0,aθ0,b(θ0,a+θ0,b)/2if 0<λa<Cif 0<λb<Cotherwise
实现指导