SMO(Sequential Minimal Optimization) 伪代码(注释)
Algorithm: Simplified SMO
这个版本是简化版的,并没有采用启发式选择,但是比较容易理解。
输入:
C: 调和系数
tol: 容差 (tolerance)
max passes: $\alpha$ 不改变时的最大迭代次数
$(x^{(1)}, y^{(1)}), . . . , (x^{(m)}, y^{(m)})$: 训练样本
输出:
$\alpha\in\mathbf{R}^m$: 所要求解的 Lagrange 乘子, $\alpha=(\alpha_1,\alpha_2,...,\alpha_m)$
$b\in\mathbf{R}$ : 阈值 b
采用的数学符号标准为:
1、上标表示序数(例如 $(x^{(m)},y^{(m)})$ 表示输入的第m个样本点与类别)
2、下标表示向量的分量或者维度(例如 $w_i$ 表示 w 的第 i 个分量)
伪代码中的变量说明:
num_changed_alphas: 改变的 $\alpha$ 分量的数目
m: 训练样本的数目
$\varepsilon$: 指定的精度
下面是伪代码($\alpha$ 初始值都为0,b 初始值也为0)
◦ 初始化 $\alpha_i = 0, i=1 \ldots m, b = 0$
◦ 初始化 passes = 0, max_passes=20
◦ 初始化 $\varepsilon = 10^{-5}$
◦ $while$ (passes < max_passes)
◦ num_changed_alphas = 0
◦ $for$ $i = 1 \ldots m$,
◦ 计算 $E_i = f(x^{(i)}) − y^{(i)}$, 公式为:$$ \begin{align*} f(x^{(i)}) &=\sum_{k=1}^{m}\alpha_k y^{(k)}\langle x^{(k)},x^{(i)} \rangle \\ E_i &= \sum_{k=1}^{m}\alpha_k y^{(k)}\langle x^{(k)},x^{(i)} \rangle-y^{(i)} \end{align*}$$
◦ $if$ $((y^{(i)}E_i < −tol$ && $\alpha_i < C)$ || $(y^{(i)}E_i > tol$ && $\alpha_i > 0))$
◦ 随机选择 $j \ne i$
◦ 计算 $E_j = f(x^{(j)}) − y^{(j)}$, 公式为:$$ \begin{align*} f(x^{(j)}) &=\sum_{k=1}^{m}\alpha_k y^{(k)}\langle x^{(k)},x^{(j)} \rangle \\ E_j &= \sum_{k=1}^{m}\alpha_k y^{(k)}\langle x^{(k)},x^{(j)} \rangle-y^{(j)} \end{align*}$$
◦ 保存旧 $\alpha$: $$\begin{align*}\alpha_i^{(old)} &= \alpha_i \\ \alpha_j^{(old)} &=\alpha_j\end{align*}$$
◦ 计算下限与上限: $L, H$, 公式为:$$\begin{cases} L=max(0,\alpha_j-\alpha_i),\; H=min(C, C+\alpha_j - \alpha_i) &if \;\; y^{(i)} \ne y^{(j)} \cr L=max(0,\alpha_j+\alpha_i-C),\; H=min(C, \alpha_j + \alpha_i) &if \;\; y^{(i)} = y^{(j)} \end{cases}$$
◦ $if \; (L == H)$
$continue$
◦ 计算 $\eta$, 公式为: $$\eta=2\langle x^{(i)},x^{(j)} \rangle - \langle x^{(i)},x^{(i)} \rangle - \langle x^{(j)},x^{(j)} \rangle$$
◦ $if$ $(\eta \ge 0)$
$continue$
◦ 计算新的 $\alpha_j$, 公式为: $$\alpha_j^{(new,unc)} := \alpha_j - \frac{y^{(j)}(E_i - E_j)}{\eta}$$
◦ 剪辑新的 $\alpha_j$, 公式为:$$\alpha_j^{(new)} := \begin{cases}H &if \;\; \alpha_j^{(new,unc)}\gt H \cr \alpha_j &if \;\; L\le\alpha_j^{(new,unc)}\le H \cr L &if \;\; \alpha_j^{(new,unc)}\lt L\end{cases}$$
◦ $if$ $(\left|\alpha_j^{(new)} − \alpha_j^{(old)} \right| \lt \varepsilon)$
$continue$
◦ 计算 $\alpha_i^{(new)}$, 公式为:$$\alpha_i^{(new)} := \alpha_i^{(old)}+y^{(i)}y^{(j)}(\alpha_j^{(old)}-\alpha_j^{(new)})$$
◦ 分别计算 $b_1$ 和 $b_2$,公式为:
$ b_1^{(new)} :=b^{(old)} - E_i - y^{(i)}(\alpha_i^{(new)} - \alpha_i^{(old)})\langle x^{(i)},x^{(i)} \rangle - y^{(j)}(\alpha_j^{(new)} - \alpha_j^{(old)})\langle x^{(i)},x^{(j)} \rangle $
$ b_2^{(new)} :=b^{(old)} - E_j - y^{(i)}(\alpha_i^{(new)} - \alpha_i^{(old)})\langle x^{(i)},x^{(j)} \rangle - y^{(j)}(\alpha_j^{(new)} - \alpha_j^{(old)})\langle x^{(j)},x^{(j)} \rangle $
◦ 计算 b,公式为:$$ b := \begin{cases} b_1 &if \;\; 0 \lt \alpha_i^{(new)} \lt C \cr b_2 &if \;\;0 \lt \alpha_j^{(new)} \lt C \cr \frac{b_1+b_2}{2} &otherwise \end{cases} $$
◦ num_changed_alphas := num_changed_alphas + 1
◦ $end$ $if$
◦ $end$ $for$
◦ $if$ (num changed alphas == 0) //此时 $\alpha$ 的每一个分量都不发生变化了,然后看外层循环(第一个变量)发生变化后的状况
passes := passes + 1
◦ $else$
passes := 0
◦ $end$ $if$
◦ $end \; while$
SMO(Sequential Minimal Optimization) 伪代码(注释)的更多相关文章
- SMO优化算法(Sequential minimal optimization)
原文:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html SMO算法由Microsoft Research的John C. ...
- Jordan Lecture Note-8: The Sequential Minimal Optimization Algorithm (SMO).
The Sequential Minimal Optimization Algorithm (SMO) 本文主要介绍用于解决SVM对偶模型的算法,它于1998年由John Platt在论文“Seque ...
- sequential minimal optimization,SMO for SVM, (MATLAB code)
function model = SMOforSVM(X, y, C ) %sequential minimal optimization,SMO tol = 0.001; maxIters = 30 ...
- Support Vector Machine (2) : Sequential Minimal Optimization
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines 论文研读
摘要 本文提出了一种用于训练支持向量机的新算法:序列最小优化算法(SMO).训练支持向量机需要解决非常大的二 次规划(QP)优化问题.SMO 将这个大的 QP 问题分解为一系列最小的 QP 问题.这些 ...
- Sequential Minimal Optimization (SMO) 算法
SVM 最终关于 $a$ 目标函数为凸优化问题,该问题具有全局最优解,许多最优化算法都可以解决该问题,但当样本容量相对很大时,通常采用 SMO 算法(比如 LIBSVM),该算法为启发式算法,考虑在约 ...
- Sequential Minimal Optimization(SMO,序列最小优化算法)初探
什么是SVM SVM是Support Vector Machine(支持向量机)的英文缩写,是上世纪九十年代兴起的一种机器学习算法,在目前神经网络大行其道的情况下依然保持着生命力.有人说现在是神经网络 ...
- SMO算法(转)
作者:[已重置]链接:https://www.zhihu.com/question/40546280/answer/88539689来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- SMO算法精解
本文参考自:https://www.zhihu.com/question/40546280/answer/88539689 解决svm首先将原始问题转化到对偶问题,而对偶问题则是一个凸二次规划问题,理 ...
随机推荐
- Asp 图形化报表
1 图形化的报表的优点 分析.统计业务数据 表现直观,漂亮,有震撼效果的图形化的方式展现业务数据 复杂的业务数据简单化 2 常用的报表组件 HighCharts:是纯js编写的图形化报表 水晶报表 ...
- MVC bundles
Bundles用于打包CSS和javascript脚本文件,优化对它们的组织管理.显示模式则允许我们为不同的设备显示不同的视图. 减少请求数量和带宽,当然在开发调试时一般不开启.
- 解决:debug-stripped.ap_' specified for property 'resourceFile' does not exist.
1.错误描述 更新Android Studio到2.0版本后,出现了编译失败的问题,我clean project然后重新编译还是出现抑郁的问题,问题具体描述如下所示: Error:A problem ...
- 营配数据质量核查,关于营销mis系统与配电gis系统里面的sql语句查询,做为积累使用,下次就不用重复写同样的语句了。
1.配电gis线路导出数据: select r.name 线路名称,r.run_status 运行状态,r.voltage_level 电压等级,r.manager_depart 管理部门,r.bel ...
- Nagios设置只监控不报警
设置全部监控项都开启邮件报警: vim /usr/local/nagios/etc/nagios.cfg 设置 enable_notifications=1 1为开启,0为关闭 如个别监 ...
- 查看oracle数据库下面的所有的表,执行某个sql脚本:
查看oracle数据库下面的所有的表: select * from user_tables;//user为用户名 执行某个sql脚本: SQL>@e 文件名.sql
- Objective-C学习篇08—NSDictionary与NSSet
NSDictionary与NSMutableDictionary NSSet与NSMutableSte 字典 字典:字典分为可变字典NSDictionary和不可变字典NSMutableDiction ...
- 快速幂:quickpow
众所周知,快速幂是优化对数的次方运算的最普遍手段.在学习快速幂的思想时,其分治思想容易让大家用简单的递归实现. 但其实,除了递归之外,更好的方法会是简单的 WHILE循环.下面贴代码: #includ ...
- Hibernate 缓存机制(转)
一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...
- 关于PHP伪静态Rewrite设置
Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则 表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 一.Apache配置: 1.支持httpd ...