在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将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

有任何问题,请联系weibao798@gmail.com

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

  1. 支持向量机(四)----序列最小最优化算法SMO

    在支持向量机(二)和(三)中,我们均遗留了一个问题未解决,即如何求解原问题的对偶问题: 在支持向量机(二)中对偶问题为: 在支持向量机(三)中的对偶问题为: 对于上述两个对偶问题,我们在支持向量机(三 ...

  2. SMO序列最小最优化算法

    SMO例子: 1 from numpy import * 2 import matplotlib 3 import matplotlib.pyplot as plt 4 5 def loadDataS ...

  3. 【机器学习】支持向量机(SVM)的优化算法——序列最小优化算法(SMO)概述

    SMO算法是一一种启发式算法,它的基本思路是如果所有变量的解的条件都满足最优化问题的KKT条件,那么这个最优化问题的解就得到了.因为KKT条件是该优化问题的充分必要条件. 整个SMO算法包括两个部分: ...

  4. Sequential Minimal Optimization(SMO,序列最小优化算法)初探

    什么是SVM SVM是Support Vector Machine(支持向量机)的英文缩写,是上世纪九十年代兴起的一种机器学习算法,在目前神经网络大行其道的情况下依然保持着生命力.有人说现在是神经网络 ...

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

    这篇文章将介绍感知器.逻辑回归的求解和SVM的部分求解,包含部分的证明.本文章涉及的一些基础知识,已经在<梯度下降.牛顿法和拉格朗日对偶性>中指出,而这里要解决的问题,来自<从感知器 ...

  6. 【转载】NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法

    原文:NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩.机器学习及最优化算法 导读 AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自 ...

  7. 机器学习经典算法之SVM

    SVM 的英文叫 Support Vector Machine,中文名为支持向量机.它是常见的一种分类方法,在机器学习中,SVM 是有监督的学习模型. 什么是有监督的学习模型呢?它指的是我们需要事先对 ...

  8. 最优化算法——常见优化算法分类及总结

    之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结. 在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成 ...

  9. PCL—低层次视觉—点云分割(最小割算法)

    1.点云分割的精度 在之前的两个章节里介绍了基于采样一致的点云分割和基于临近搜索的点云分割算法.基于采样一致的点云分割算法显然是意识流的,它只能割出大概的点云(可能是杯子的一部分,但杯把儿肯定没分割出 ...

随机推荐

  1. 如何用js定义数组,用js来拼接json字段

    定义js数组的方式有: var arr = (); var arr = []; var arr = new Array(); 如何拼接成一个json字段. <!DOCTYPE HTML PUBL ...

  2. Newtonsoft.Json 处理多态类型的反序列化

    Newtonsoft.Json的序列化和反序列化很成熟也很好用, 最近在处理多态类型的反序列化中遇到了问题, 反序列化后只能到基类,而得不到也不能转换到子类.从网上查询了一番后,需要写一个创建类型的C ...

  3. 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.

    刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.

  4. PHP Web Shell in browser

    /************************************************************************************* * PHP Web She ...

  5. Linux 网络配置

    1. 查看网卡型号: lspci | grep -i ethernet 上图中显示了网卡的具体型号,可以根据这个网卡型号在Intel官网下载Linux版本的驱动. 2. 以太网开机启动: 以太网的配置 ...

  6. Matlab绘图函数一览

    要查看Matlab所有绘图函数,请从Matlab主界面菜单查看“绘图目录”,或从Matlab帮助文档查看“Types of MATLAB Plots”(在线版本).本文的图和英文解释摘自Matlab帮 ...

  7. 特性Atrribute和枚举

    特性的简单实用!特性存放在metedata里面,它离不开反射. Program.cs class Program { static void Main(string[] args) { Console ...

  8. JavaScript面向对象,及面向对象的特点,和如何构造函数

    1.面向对象和面向过程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了: 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是 ...

  9. js MATH

    MATH Math 对象用于执行数学任务. 无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法. Math 对象属性 var a=Math.E; //输出2.718281828459 ...

  10. 小结MapReduce 程序的流程及设计思路

    简单回顾一下,目前系统是WCF三层C/S插件系统.服务器端是WCF程序寄宿在IIS中,其中我的配置设计是长连接,客户端支持多线程,一个volatile的实例对象.客户端用Winform,其中客户端框架 ...