序列最小最优化算法(SMO算法)
前面三篇我已经谈了谈我对支持向量机的理解,推到了各类支持向量机的对偶算法,我们有很多最优化算法来求解这个问题,但是样本容量很大时,这些算法会变得非常低效。人们就提出了很多快速实现算法,SMO算法就是其中之一,主要是用来解这个对偶问题:
s.t.
这个问题中变量是拉格朗日乘子,一个变量对应一个样本点,变量的总数即为样本容量N,也就是说我们现在要求的这个函数是N元函数。
在介绍SMO之前,大家可以先了解下坐标上升算法,这两个算法类似。
坐标上升算法
坐标上升算法每次更新多元函数中的一维,经过多次迭代直到收敛达到优化函数的目的。
下图中从A点到F*红色线所示就是这个过程。
SMO算法
上面已经提到了我们需要优化N个变量,SMO算法就是将N个参数的二次规划问题分成了多个二次规划问题,每个子问题只需要求解两个参数。
为什么要两个两个求?
我们要选择一对变量,因为在SVM中变量是相互关联的:,若只固定一个
,当我们对
修正后,等号将不再成立。我们至少需要两个来保证等式成立。
我们先选取两个需要优化的参数为,
(参数的选取不是随意的,在最后会介绍),其他变量是固定的,
将
,
带入上述对偶问题式子:
我们可以得到SMO的最优化问题的子问题:
s.t.
我们可以借助,为了方便书写,我们令
可得:
推出:
为了方便书写,我们令
将
代入上式,变成只有
的二次函数:
对
求导数:
=0
将所有带的移到等式的同一侧
这里我们引入:
其中
是
的预测值,
是真实值
由此式也可得出:
i=1时:
i=2时:
补充一点:我们将优化后的记为
,
,均满足:
将上边求导得到的式子中的v和换掉:
到了这一步我们已经得到了优化后的
,但是还有一个要注意的点!!!要判断
是否满足定义域,我们管这一步叫对原始解进行裁剪:
将 两边同时乘上
得: 这个式子对应两种情况:
:
:
当 时:
当 时:
综上:
求解
:
完成
的优化后,需要重新计算b,
(为了进行变量的选择):
变量的选择:
最后,我们就得到了SMO算法:
序列最小最优化算法(SMO算法)相关推荐
- 一文看懂 序列最小最优化算法---SMO
一.SMO的背景介绍 序列最小最优化算法(sequential minimal optimization,SMO)于1998年被John Platt发明,是一种用于解决支持向量机训练期间出现的二次规划 ...
- ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)
ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核) 目录 输出结果 设计思路 设计代码(部分代码) 输出结果 设计思路 设计代码(部分代码) var doTest = functi ...
- smo算法matlab实现,SVM之序列最小最优化算法(SMO算法)
SVM回顾 支持向量机(SVM)的一大特点是最大化间距(max margin).对于如上图的二分类问题,虽然有很多线可以将左右两部分分开,但是只有中间的红线效果是最好的,因为它的可活动范围(margi ...
- 砥志研思SVM(四) 序列最小最优化算法(SMO)论文翻译
- SMO(序列最小优化)算法论文及原理详述
今日拜读了Platt的关于SMO的论文:Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Mac ...
- SMO算法原理转载+自己补充
几何间隔: 这个意思就是超平面离数据集的点的距离. 都别装逼了,说人话是啥? 说人话就是高中几何里的"点到平面距离". 经常听到的硬间隔和软间隔是啥? 说人话: 惩罚系数C=0,硬间隔 惩罚系数C&g ...
- 支持向量机器—SMO算法
文章目录 引入SMO的背景 两个变量二次规划求解方法 选择两个变量的方法 第一个变量选择 第二个变量选择 计算阈值b和差值EiE_iEi SMO算法 参考文章: 引入SMO的背景 前面的文章提到,S ...
- 【机器学习】:SMO算法理解
SMO算法看了近3遍感觉还是有点朦朦胧胧,模模糊糊. 所以索性,理解多少写多少,避免遗忘.可能会有很多错误,欢迎指正. 主要基于李航的<统计学习方法> SMO(sequential min ...
- SVM笔记之SMO算法
目录 SMO序列最小最优化算法 变量更新 更新变量的选取 bbb和误差EiE_iEi的计算 SMO序列最小最优化算法 SMO算法实际上用于SVM对偶问题求解中α∗\boldsymbol{\alpha ...
最新文章
- Qt入门——三个臭皮匠顶个诸葛亮
- 在 IntelliJ IDEA 中远程调试 Java 程序
- Spark MLlib实现的广告点击预测–Gradient-Boosted Trees
- 2018年最后一个月最值得关注的13个优质公号
- .NET串口通讯解决方案
- Linux系统中打开文件数量的查看方法
- Python 线程复习
- 【1.Delphi基础】1.Delphi程序设计入门
- 【离散数学】容斥原理
- 23----JS基础-----Unicode编码表
- 基于Verilog实现2ASK调制
- 字符编码-- Unicode(1991年)
- 深圳礼品展1688再度强强联手,30万平超级大展10月震撼来袭!
- linux根据端口限速,Linux 中限制网络带宽使用trickle或wondershaper
- 何时使用领域驱动设计(DDD)
- 口袋网咖已有服务器在使用怎么注销,口袋网咖怎么登录_口袋网咖登录方法介绍_游戏吧...
- 基于RBF函数的点云孔洞修补
- 控制面板快捷键win10_win10的Microsoft兼容性遥测占用大量资源?这样解决
- led接口实验微型计算机,“微机原理与接口技术”开放性实验建设——“点阵LED显示器显示汉字”实验...
- R语言使用log函数计算对数、自定义指定底数
热门文章
- Excel 2010 VBA 入门 082 数据处理之对比两个表的数据
- 高斯分布和正态分布有什么区别?Gaussian VS Normal
- 互相关函数实现(c语言完整工程,利用cmake编译)
- 抓包工具charles的使用
- 广西大学计算机专业女生就业前景,广西大学计算机学院比桂林电子科技大学计算机专业好吗?...
- VR+全景播放器+头控讲解-04
- html控制树莓派小车,用家里旧的红外遥控器控制树莓派小车
- Flutter PDF Android 电子签章不显示问题
- 获取网站上的旅游攻略信息,并作数据可视化
- Simscape接触建模简介