在支持向量机模型的求解中,我们用到了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作优化,不考虑约束条件中相等的情况是由于在界上的例子相应的系数α_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 matlab,理解支持向量机(三)SMO算法相关推荐

  1. matlab中求最大因数,matlab最大公约数 三种算法

    算法设计与分析 11信本余启盛 118632011004 一.上机目的及内容 1.上机内容 求两个自然数m和n的最大公约数. 2.上机目的 (1)复习数据结构课程的相关知识,实现课程间的平滑过渡: ( ...

  2. 回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出

    回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出 目录 回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出 预测效 ...

  3. Matlab实现支持向量机算法(附上完整仿真源码)

    支持向量机是一种常见的机器学习算法,它可以用于分类和回归问题.在Matlab中使用支持向量机,可以方便地构建和训练模型,并进行预测和评估.本文将介绍Matlab支持向量机的基本原理以及一个简单的分类案 ...

  4. 【老生谈算法】matlab实现支持向量机的回归拟合——混凝土抗压强度预测

    Matlab实现支持向量机的回归拟合--混凝土抗压强度预测 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 说明 文档(点击下载) 本算法文档 [老生谈算法]matlab实现支 ...

  5. 《机器学习实战》:通俗理解支持向量机

    代码.数据集.文章我都是放到了https://github.com/AAAZC/SVM_blog 上面了,文章在issues里面,建议上这个网站看 <机器学习实战>:通俗理解支持向量机 关 ...

  6. SMO(序列最小优化)算法论文及原理详述

    今日拜读了Platt的关于SMO的论文:Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Mac ...

  7. 深入理解支持向量机(SVM)

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法A ...

  8. 机器学习 | MATLAB实现支持向量机回归参数设定

    机器学习 | MATLAB实现支持向量机回归参数设定 目录 机器学习 | MATLAB实现支持向量机回归参数设定 基本介绍 参数描述 学习总结 参考资料 基本介绍 RegressionSVM 是一种支 ...

  9. 我以前一直没有真正理解支持向量机,直到我画了一张图!

    选自towardsdatascience 作者:Rohit Pandey 编译:机器之心(almosthuman2014) 点击文末阅读原文 我以前一直没有真正理解支持向量机,直到我画了一张图. 1. ...

最新文章

  1. Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#Object‘的解决方法...
  2. 量子计算机,开启中国速度
  3. python编写表格程序_python对excel表格的操作
  4. Java代码样式运算符换行格式
  5. 万能驱动安装器_Windows驱动安装指南
  6. 看完就能用!这本Python3.6 的书玩大了!网友:牛!
  7. django调用python脚本返回_Django使用HttpResponse返回图片并显示的方法
  8. php从数据库删除数据,php怎么从数据库中删除数据
  9. kb2919355无法安装
  10. 【概率论】【笔记】【@汤家凤】【数一】【第五章】
  11. 编程中的幂等性 —— HTTP幂等性
  12. 技术周刊 · 耿耿星河欲曙天 | SpaceX 上的前端架构;跨平台新选择;开源世界的新“大门”;用户推荐算法的敲门砖;关于“鸿蒙”,你应该知道这些
  13. 网络安全(2) -- 关于一次XSS攻击-图片(img标签)的onerror事件
  14. 官方盘点 .NET 7 新功能
  15. Java根据两点经纬度计算距离
  16. 11 个让你惊叹的罕见 JavaScript One-Liner
  17. 深信服服务器销售话术,深信服超融合架构功能特点.ppt
  18. 基于Android Studio的蓝牙通信的简单应用与开发
  19. 计算机进制的转换(任意进制)详解
  20. 【Machine Learning】【Andrew Ng】- notes(Week 1: model and cost function)

热门文章

  1. redis hash field过期时间_Redis系列-Redis数据类型
  2. 论《LEFT JOIN条件放ON和WHERE后的区别》
  3. 【BZOJ2154】Crash的数字表格 [莫比乌斯反演]
  4. Java EE产生的背景
  5. android自定义悬浮控件
  6. dolphin.php 视频,DolphinPHP V1.0.4发布
  7. Emacs之hs-minor-mode折叠代码
  8. Android/Linux之procrank查内存工具
  9. Go接口(Interface)的使用方法
  10. shell逻辑判断和-a区别