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

    /*========================事务==============================*/begin tran--开始事务 --开始写流程语句 --语句写完之后if @@ ...

  2. 用jQuery判断一个元素的各种状态

    用jQuery判断一个元素是否显示   用jQuery判断一个元素是否显示:$(element).is(":visible"); 类似的,判断一个元素是不是第一个子元素:$(ele ...

  3. C#编程语言与面向对象——委托

    委托(delegate)也可以看成是一种数据类型,可以用于定义变量,但它是一种特殊的数据类型,所定义的变量能接收的数值只能是个函数,更确切地说,委托类型的变量可以接收一个函数的地址. 简单地说 委托变 ...

  4. Spring配置文件详解 - applicationContext.xml文件路径

    spring的配置文件applicationContext.xml的默认地址在WEB-INF下,只要在web.xml中加入代码 org.springframework.web.context.Cont ...

  5. MySql 中游标,事务,终止存储过程方法总结

    最近在项目开发中,有段逻辑处理,需要在网站,app,后台分别运行,这样给后期的维护带来了很大的不方便,容易遗漏app端或者后台,所以讲java代码转换成存储过程,把逻辑处理写在了mysql端,其中遇到 ...

  6. 第六篇T语言实例开发,多点找色应用

    ---恢复内容开始--- 多点找色应用 文字,图形特征的获取 多点找色 功能原型 窗口多点找色(窗口句柄,x1,y1,x2,y2,颜色值,色点组,相似度,方向,返回x,返回y) 功能说明 根据指定的多 ...

  7. maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener

    环境:Groovy/Grails Tool Suite 3.1.0.RELEASE(BASED ON ECLIPSE JUNO 3.8.1).JDK1.6.Maven3.05.Tomcat6 错误描述 ...

  8. js数组的队栈操作

    <script> //一个数组 var testArray = [1,2,3,4,5]; //shift()方法,返回并移除数组中的第一个元素的值 testArray.shift();// ...

  9. oracle数据库从入门到精通

    oracle产品线围绕企业开发平台的企业开发平台四大组件:unix,weblogic中间件,java编程语言,oracle数据库oracle 开发主要分两类数据库管理:dba数据库编程:分两部分   ...

  10. Codis集群

    一.简介 Codis是一个分布式的Redis解决方案,对于上层的应用来说,连接Codis Proxy和连接原生的Redis Server没有明显的区别(不支持的命令列表),上层应用可以像使用单机的Re ...