序列最小最优化算法(SMO)-SVM的求解(续)

在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解。也就是我们接下来要介绍的序列最小最优化算法。

序列最小最优化算法(SMO):

首先回顾一下。我们使用广义拉格朗日函数,将目标函数和限制条件写到一起,然后证明了原始问题能够转化成对偶问题来求解。并且使用KKT条件将对偶问题化简,得到下面的问题(以非线性可分SVM的研究问题作为例子,求解):

$\max \limits_{a} \ -\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}a_ia_jy_iy_jK(x_i,x_j)+\sum_{i=1}^{n}a_i \ \ \ \ (1)$

$s.t. \ \sum_{i=1}^{n}a_iy_i=0 \ \ \ \ \ \ (2)$

$0\leq a_i\leq C, \ i=1,2,....,n \ \ \ \ \ (3)$

事实上,上面的问题完全可以使用梯度下降等类似的办法进行解决。但是,当训练样本过大的时候,这些算法往往变得低效,以至于无法使用。为了高效地实现支持向量机,1998年,Platt提出了SMO算法。

这个算法的基本思路是:如果所有的变量都满足KKT条件,那么,这个最优化问题的解就已经得到了。(谁叫KKT条件是该最优化问题的充要条件呢)否则的话。我们从上面式子中的(2)式入手。

SMO希望先固定其他的变量,然后改变(2)中的一部分变量。显然,如果只改变一个变量,固定剩下的n-1个变量,由于等式的限制,实际上不能改变任何变量。所以,至少需要改变两个变量。(为什么不改变更多的变量呢?改变更多的变量意味着问题变得更复杂,所以,改变其中两个,然后固定剩余n-2个是比较合理的选择)

所以,我们从式子(2)出发,从中选择两个变量($a_i$和$a_j$)。这时候,问题来了,该怎么选?

很明显,如果 已经满足的KKT条件,我们就没有必要对其进行更新了。需要更新的变量,必然是违反了KKT条件的变量。SMO算法的策略是:优先更新违反KKT条件最严重的 ,作为选择的第一个变量。

那么,用什么来衡量是否违反KKT条件的程度呢?要判断结果是否正确,我们得先知道正确的结果是什么。下面列出了满足KKT条件时,$a_i$和$y_ig(x_i)$应该满足的关系。

$a_i=0 \iff y_ig(x_i)\geq 1$

$0<a_i<C \iff y_ig(x_i)=1$

$a_i=C \iff y_ig(x_i)\leq 1$

其中,$g(x_i)=\sum_{j=1}^{N}a_jy_jK(x_i,x_j)+b$

我们是在误差为$\xi$的范围内检查 是否满足KKT条件。具体的检验过程中,先检查$0<a_i<C$的样本,即间隔边界上面的样本,如果这些样本都满足KKT条件,再检查剩余的样本是否满足KKT条件。

得到第一个变量后,我们继续来确定第二个变量:

与第一个变量不同的地方是,第二个变量的选择标准,是希望能够使第二个变量有足够大的变化,也就是其改变量应该大于一定的阈值。如果选定了$a_i$后,不能找到有足够改变量的$a_j$,则选择一个新的$a_i$。

下面,通过例子来说明SMO的算法:

不妨设选择的两个变量是$a_1,a_2$,其他变量$a_i(i=3,4,5,6...,n)$固定为常量。于是(1)式可以改写为:

$\max \limits_{a_1,a_2} \ -\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}a_ia_jy_iy_jK(x_i,x_j)+\sum_{i=1}^{n}a_i$

即:$\min \limits_{a_1,a_2} \ W(a_1,a_2)=\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}a_ia_jy_iy_jK(x_i,x_j)-\sum_{i=1}^{n}a_i$

化简得到:

$\min \limits_{a_1,a_2} \ W(a_1,a_2)=\frac{1}{2}K_{11}a_{1}^2+\frac{1}{2}K_{22}a_{2}^2+y_1y_2K_{12}a_1a_2-(a_1+a_2)+y_1a_1\sum_{i=3}^{n}y_ia_iK_{i1}+y_2a_2\sum_{i=3}^ny_ia_iK_{i2}+C \ \ (4)$

$s.t. \ \ a_1y_1+a_2y_2=\xi \ \ \ (5)$

$0\leq a_i\leq C, \ \ \ i=1,2 \ \ (6)$

于是,SMO算法的关键步骤就变成了:求解两个变量的二次规划问题

由于$y_1,y_2\in \{+1,-1\}$,所以,首先对y进行分类讨论:

当$y_1=y_2$时,(5)可以化简为:$a_1+a_2=k$

而$y_1\ne y_2$时,(5)可以化简为:$a_1-a_2=k$

其中,$0\leq a_i\leq C, \ \ \ i=1,2$

因此,对上面的限制条件分类讨论:

由于$a_1,a_2$由等式联系在一起,因此,只需要知道其中一个值,另外一个就确定了。不妨假设初始可行解为$a_{1}^{old},a_{2}^{old}$,最优解为$a_{1}^{new},a_{2}^{new}$,并且在沿着约束方向未经剪辑时 的最优解为$a_{2}^{new,unc}$。

显然,$a_{2}^{new}$满足(6)中的不等式约束。因此,有$L\leq a_{2}^{new}\leq H$。其中L和H分别为$a_{2}^{new}$的上界和下界。

当$y_1=y_2$时,若$k<C$,那么$0\leq a_1+a_2<C$,可以得到$L=0, \ H=a_{1}^{old}+a_{2}^{old}$

若$k\geq C$,则$C\leq a_1+a_2\leq 2C$,可以得到$L=k-C=a_{1}^{old}+a_{2}^{old}-C, \ H=C$

综合一下,得到:

$L=\max(0,a_{1}^{old}+a_{2}^{old}-C), \ H=\min(C,a_{1}^{old}+a_{2}^{old})$

同理,当$y_1\ne y_2$时,若$k<0$,那么$-C\leq a_1-a_2<0$,可以得到$L=0, \ H=C+a_{2}^{old}-a_{1}^{old}$

若$k\geq 0$,那么$0\leq a_1-a_2\leq C$,可以得到$L=a_{1}^{old}-a_{2}^{old}, \ H=C$

综合一下,得到:

$L=\max(0,a_{1}^{old}-a_{2}^{old}), \ H=\min(C,C+a_{2}^{old}-a_{1}^{old})$

下面开始求解(4):

由(5)得:$a_1y_1=\xi-y_2a_2\rightarrow \ a_1y_1y_1=(\xi-y_2a_2)y_1 \rightarrow \ a_1=(\xi-y_2a_2)y_1$

将结果代入(4)得到:

$W(a_2)=\frac{1}{2}K_{11}(\xi-y_2a_2)^2+\frac{1}{2}K_{22}a_{2}^2+y_1y_2K_{12}(\xi-y_2a_2)a_2-((\xi-y_2a_2)y_1+a_2)+(\xi-y_2a_2)\sum_{i=3}^{n}y_ia_iK_{i1}+y_2a_2\sum_{i=3}^ny_ia_iK_{i2}+C$

对$a_2$求导数并令$\frac{\partial W}{\partial a_2}=0$

最终得到下面的迭代公式:

$a_{2}^{new,unc}=a_{2}^{old}+\frac{y_2(E_1-E_2)}{\eta}$

其中:

$\eta=K_{11}+K_{22}-2K_{12}$

$E_1=g(x_1)-y_1, \ E_2=g(x_2)-y_2$

$g(x_i)=\sum_{j=1}^{n}a_jy_jK(x_j,x_i)+b$(b的计算会在后面继续讨论)

因此,可以得到剪辑后的解是:

$a_{2}^{new}=\left\{\begin{aligned}H&,& \ \ a_{2}^{new,unc}>H\\a_{2}^{new,unc}&,& \ L\leq a_{2}^{new,unc}\leq H\\L&,& a_{2}^{new,unc}<L\end{aligned}\right.$

由$a_{2}^{new}$求解$a_{1}^{new}$得:

$a_{1}^{new}=a_{1}^{old}+y_1y_2(a_{2}^{old}-a_{2}^{new})$

还有一些细节:

在每一次完成两个变量的更新后,需要将$b_i, \ i=1,2$也更新。

$0<a_i<C$时,由$y_ig(x_i)=y_i(\sum_{j=1}^{n}a_jy_jK(x_j,x_i)+b)=1$,两边同乘$y_i$,得到:

$\sum_{j=1}^{n}a_jy_jK(x_j,x_i)+b=y_i, \ i=1,2$

由此,将$a_{1}^{new},a_{2}^{new}$代入后,可以分别解得$b_{1}^{new},b_{2}^{new}$。

当$a_{1}^{new},a_{2}^{new}$都满足$0<a_i<C$时,$b_{1}^{new}=b_{2}^{new}$

如果$a_{1}^{new},a_{2}^{new}$是0或者C,那么$b_{1}^{new},b_{2}^{new}$以及它们之间的数都满足KKT条件,这时候选择它们的中点作为$b^{new}$。

每次更新完后,需要对$E_i$更新,其中:$E_i=\sum_{S}y_ia_iK(x_i,x_j)+b^{new}-y_i$,S是所有支持向量$x_j$的集合。

参考文献:

(1)李航 《统计学习方法》

(2)维基百科

转载请注明:http://www.cnblogs.com/weibao/p/5581156.html

有任何问题,请联系[email protected]

时间: 2024-11-03 19:53:00

序列最小最优化算法(SMO)-SVM的求解(续)的相关文章

SMO序列最小最优化算法

SMO例子: 1 from numpy import * 2 import matplotlib 3 import matplotlib.pyplot as plt 4 5 def loadDataSet(fileName): 6 dataMat = []; labelMat = [] 7 fr = open(fileName) 8 for line in fr.readlines(): 9 lineArr = line.strip().split(',') 10 dataMat.append(

SVM之序列最小最优化求解算法(SMO)

机器学习算法总结--SVM

简介 SVM是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解.或者简单的可以理解为就是在高维空间中寻找一个合理的超平面将数据点分隔开来,其中涉及到非线性数据到高维的映射以达到数据线性可分的目的. 训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机,又称为硬间隔支持向量机:训练数据近似线性可分时,通过软间隔最大化,也学习一个线性分类器,即线性支持向量机,也称为软间隔支持向量机

感知器、逻辑回归和SVM的求解

这篇文章将介绍感知器.逻辑回归的求解和SVM的部分求解,包含部分的证明.本文章涉及的一些基础知识,已经在<梯度下降.牛顿法和拉格朗日对偶性>中指出,而这里要解决的问题,来自<从感知器到SVM> .<从线性回归到逻辑回归>两篇文章. 感知器: 前面的文章已经讲到,感知器的目标函数如下: $min \ L(w,b)$ 其中,$L(w,b)=-\sum_{i=1}^{n}[y_i*(w*x_i+b)]$ 对于上面这种无约束的最优化问题,一般采用的是梯度下降的办法,但是,考虑到

SMO(序列最小优化)——SVM

SMO(序列最小优化)引子:坐标上升法目标为: 坐标上升算法: 即每次只变化一个维度,取得该维度的最优值.例图: 参数收敛的方向都是平行于坐标轴的.  SMO算法: 由于我们要解决的问题中有一个约束是: 所以不可能只变化其中一个变量,因此需要选择两个变量来进行变化(其中一个变量可以由另外一个变量根据上式获得). α可能在最优值旁振荡,但w(α)一定会逐步趋向最优,顶多保持不变.

顺序最小化算法

核方法 考虑这样一个问题,如果输入X是房子的面积,我们要使用回归方法预测房子的价格.从样本点的分布中,我们看到三次方程(即使用x,x2,x3进行回归曲线拟合)能够更好的拟合数据.为了区分这两组不同的变量(前者为x,后者为(x,x2,x3)),我们称问题的特征x为原始特征(attribute).当我们把原始特征扩展到一些新的变量的时候,我们称这些新生成的变量为输入特征(features,当然,不同的人对这两种变量也存在不同的命名.但英文中主要采用attribute和feature进行区分).我们使

最优化算法&mdash;&mdash;常见优化算法分类及总结

之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结. 在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成本下,如何使利润最大化"等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称. 工程设计中最优化问题(optimalization problem)的一般提法是要选择一组参数(变量),在满足一系列有关的限制条件(约束)下,使设计

序列和集合算法之序列比较

将一个序列变成另一个序列的最少修改步数. 例如下图,将字符串A变成字符串B,所需要的步骤为6个步骤,match表示0步,其他操作表示1步: 设计算法如下: public sealed class MinimumEditDistance { public int[,] CalculateDistance(string originalStr, String targetStr) { int LenA = originalStr.Length; int LenB = targetStr.Length

最大熵学习笔记(五)最优化算法

  生活中我们经常听到人们说"不要把鸡蛋放到一个篮子里",这样可以降低风险.深究一下,这是为什么呢?其实,这里边包含了所谓的最大熵原理(The Maximum Entropy Principle).本文为一则读书笔记,将对最大熵原理以及由此导出的最大熵模型进行介绍,重点给出其中所涉及数学公式的理解和详细推导. 相关链接 最大熵学习笔记(零)目录和引言 最大熵学习笔记(一)预备知识 最大熵学习笔记(二)最大熵原理 最大熵学习笔记(三)最大熵模型 最大熵学习笔记(四)模型求解 最大熵学习笔