在支持向量机模型的求解中,我们用到了SMO算法来求解向量α。

那么什么是SMO算法?在讲SMO算法之前。我们须要先了解下面坐标上升法。

1、坐标上升法

如果有优化问题:

W是α向量的函数。利用坐标上升法(当然,求目标函数的最小时即为坐标下降法)求解问题最优的步骤例如以下:



算法的思想为:每次仅仅考虑一个变量进行优化,将其它变量固定。这时整个函数能够看作仅仅关于该变量的函数,能够对其直接求导计算。

然后继续求其它分变量的值,整个内循环下来就得到了α的一组值,若该组值满足条件。即为我们求的值,否则继续迭代计算直至收敛。一个示意图例如以下:



如图为一个二次椭圆曲线的等高线,变量维数为2,初始值在点(2,-2),可见其优化路径为折线式前进,由于算法每次仅仅在一个方向上对函数进行优化。

2、SMO算法

在讲支持向量机求目标函数最优时,通过求解对偶问题转换为求解目标函数对α的极大值,例如以下:

当中C为惩处系数,α为要求的变量,每一个分量α_i 相应一个样本点(x_i,y_i),变量数为样本点容量N。

能够看到优化问题与上面提到的坐标上升法非常类似。參考上面讲到的坐标上升法,我们也能够选择向量α的一个变量,将其它变量固定进行优化。但与上面不同的是。该处优化问题包括了约束条件,

变量必须满足等式约束,所以考虑每次选择两个变量进行优化。

不失一般性,将设选择的两个变量为α_1,α_2,其它变量α_i (i=3,4,…,N)是固定的。

于是优化问题的子问题能够写作:

由于我们选择除α_1。α_2以外的变量固定,故可令

则约束条件改写为:

当中,y为类标签,值为±1,所以α_1 与α_2能够表示为:

为例,目标函数的约束域例如以下:



直线被约束条件0≤α_i≤C约束在了一个C×C的正方形中。

从图中能够看出,最优问题的子问题是求在正方形内的线段上的最优值。

这使得两个变量的最优化问题成为了实质上的单变量的最优化问题,最好还是设为变量α_2的最优化问题,由不等式约束可得α_2的取值范围:



L,H分别为正方形区域内线段的端点值。

引入符号:

表示对输入x_i的预測值和真实输出y_i之差

φ(x)是输入空间到特征空间的映射。

由条件:



将α_1代入最优子问题的目标函数。得到仅仅包括α_2的函数,对α_2求偏导并令其为0 ,可得的值。

new,unc表示求偏导后还没加取值范围[L,H]时的值。称为未剪辑值。

加上取值范围约束进而得到 的值,再而得到

α_2。α_1 的更新值例如以下:

当中,new表示更新后的值,old表示更新前的值。

若α值满足停止条件,则α即为我们求的近似解。

否则又一次扫描选择两个变量继续迭代计算直至满足停止条件。

3、变量的选择

如今的问题就是怎样选择两个变量构造最优子问题。

SMO採用启示式选择方法选择变量。所谓启示式,即每次选择拉格朗日乘子时。优先选择前面样本系数中满足条件0<α_i < C的

α_i作优化,不考虑约束条件中相等的情况是由于在界上的例子相应的系数α_i 一般都不会改变。

通过启示式搜索找到第一个变量。那么第二个应该怎样选取呢?由于要考虑算法的收敛性。第二个变量显然不是随便选的。实际上由Osuna定理,仅仅要选择的两个变量中有一个违背KKT条件。那么目标函数在一步迭代后值就会减小,而且我们希望找到的α_2 在更新后能够有足够大的变化。

由上面 的公式能够看出,其值依赖于,当α_1 确定后E_1也就确定了,因此在给定第一个变量的初始值α_i=0后,对输入例子循环遍历,找出违背KKT条件中使最大的例子点的系数作为α_2。

在特殊情况下,通过以上选择的α_2 不能使目标函数有足够的下降。那么採用下面启示式规则继续选择α_2:

遍历在间隔边界上的支持向量点,依次将其相应的变量作为α_2 试用,直到目标函数有足够的下降。若找不到合适的α_2,那么再遍历训练数据集寻找

若仍未找到。则放弃第一个α_1,又一次选择α_1 。

在α_1,α_2 完毕一次更新后,还须要对阈值b进行更新,b的更新能够通过KKT约束条件:

计算得出。

以上介绍了SMO算法的思路和大概流程。没有对算法的推导及实现上的细节做具体的介绍,大家有兴趣想要深入了解SMO的话。能够看Andrew ng的支持向量机视频和John C.Platt的《Sequential Minimal Optimization A Fast Algorithm for Trainning Support Vector Machines》。

理解支持向量机(三)SMO算法的更多相关文章

  1. SVM-非线性支持向量机及SMO算法

    SVM-非线性支持向量机及SMO算法 如果您想体验更好的阅读:请戳这里littlefish.top 线性不可分情况 线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,为了满足函数间隔大 ...

  2. 机器学习算法整理(七)支持向量机以及SMO算法实现

    以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还 ...

  3. 支持向量机的smo算法(MATLAB code)

    建立smo.m % function [alpha,bias] = smo(X, y, C, tol) function model = smo(X, y, C, tol) % SMO: SMO al ...

  4. 关于SVM数学细节逻辑的个人理解(三) :SMO算法理解

    第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t.   这个优化问题的. 虽然这个优化问题只剩下了α这一个变 ...

  5. 机器学习之支持向量机(二):SMO算法

    注:关于支持向量机系列文章是借鉴大神的神作,加以自己的理解写成的:若对原作者有损请告知,我会及时处理.转载请标明来源. 序: 我在支持向量机系列中主要讲支持向量机的公式推导,第一部分讲到推出拉格朗日对 ...

  6. 支持向量机SMO算法实现(注释详细)

    一:SVM算法 (一)见西瓜书及笔记 (二)统计学习方法及笔记 (三)推文https://zhuanlan.zhihu.com/p/34924821 (四)推文 支持向量机原理(一) 线性支持向量机 ...

  7. 支持向量机原理(四)SMO算法原理

    支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五) ...

  8. [笔记]关于支持向量机(SVM)中 SMO算法的学习(一)理论总结

    1. 前言 最近又重新复习了一遍支持向量机(SVM).其实个人感觉SVM整体可以分成三个部分: 1. SVM理论本身:包括最大间隔超平面(Maximum Margin Classifier),拉格朗日 ...

  9. 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法

    前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...

随机推荐

  1. 习题:最短路计数(SPFA最短路计数)

    最短路计数(洛谷1144)题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条.输入输出格式输入格式:输入第一行包含2个正整数N,M,为图的顶点数 ...

  2. bzoj3694最短路

    bzoj3694最短路 Description 给出一个n个点m条边的无向图,n个点的编号从1~n,定义源点为1.定义最短路树如下:从源点1经过边集T到任意一点i有且仅有一条路径,且这条路径是整个图1 ...

  3. 如何在Ionic2项目中使用第三方JavaScript库

    onic的官网放出一记大招Ionic and Typings,来介绍如何在Ionic2项目中使用第三方JavaScript库. 因为在前阵子正好想用一个非常有名的第三方JS库ChartJs来实现一些东 ...

  4. vue的v-for循环普通数组、对象数组、对象、数字

    如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  5. Mysql存储过程给变量赋值的几种方法实践

    BEGIN DECLARE v_request_count INT; #申请次数 DECLARE v_plan_count INT; #安排次数 DECLARE v_learn_count INT; ...

  6. Javascript&Html-history对象

    Javascript&Html-history对象 history对象保存着用户的上网记录,这些记录从用户打开浏览器开始. 用户借助history对象实现的跳转. history.go(-1) ...

  7. 在类中写reponse语句

    原文发布时间为:2009-06-18 -- 来源于本人的百度文章 [由搬家工具导入] 在类文件中不能直接使用response.write,需要使用 System.Web.HttpContext.Cur ...

  8. 【MFC】Tab Control 控件的使用(转)

    原文转自 http://blog.csdn.net/hustspy1990/article/details/5425365 1.先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control ...

  9. AC日记——食物链 codevs 1047

    1074 食物链 2001年NOI全国竞赛  时间限制: 3 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 动物王国中有 ...

  10. 51nod 1006 最长公共子序列Lcs 【LCS/打印path】

    1006 最长公共子序列Lcs  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...