机器学习之支持向量机(二):SMO算法
注:关于支持向量机系列文章是借鉴大神的神作,加以自己的理解写成的;若对原作者有损请告知,我会及时处理。转载请标明来源。
序:
我在支持向量机系列中主要讲支持向量机的公式推导,第一部分讲到推出拉格朗日对偶函数的对偶因子α;第二部分是SMO算法对于对偶因子的求解;第三部分是核函数的原理与应用,讲核函数的推理及常用的核函数有哪些;第四部分是支持向量机的应用,按照机器学习实战的代码详细解读。
机器学习之支持向量机(四):支持向量机的Python语言实现
1 SMO算法的概念
这里补充一点,后面的K () 函数是核函数,是把低维度的数据投射到高维度中,即把非线性转换成线性分类。知道k 是核函数就可以了,后面会再详细讲解k 函数。我们在上篇中得到关于对偶因子的式子,对其求 α 极大,现在添加符号转化成求极小,两者等价。

转化后的目标函数:

其中 约束条件中 C 是惩罚系数,由对非线性加上松弛因子得到的。
1998年,由Platt提出的序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。
2 SMO算法原理分析
我们的目标:求解对偶因子 α (α1, α2, ... , αN)
2.1 目标函数化成二元函数
SMO算法是通过一定的规定选择两个参数进行优化,并固定其余 N - 2 个参数,假如选取优化的参数是 α1, α2 ,固定α3, α4 , .., αN ,对目标函数进行化简成二元函数得:

这里强调一下,式子中的 Kij 是核函数,知道意思就可以,不了解不太影响SMO算法的推导。
2.2 将二元函数化成一元函数
约束条件:
得到
,其中 ζ 是一个定值。
让两边同时乘以y1 ,化简得到:

将(2)式带入到(1)中可得:

2.3 对一元函数求极值点
对(3)式求导并等于0,得:

假设求解得到的值,记为α1new 、α2new 优化前的解记为α1old 、α2old ,由约束条件知:
得到:

再设支持向量机超平面模型为:f (x) = ωTx + b , ω = Σ αi yi xi 即 f (xi) 为样本xi 的预测值,yi 表示 xi 的真实值,则令Ei 表示误差值。

由于
可得:


将上面的式子(4)(6)(7)带入求导公式中,此时解出的 α2new 没有考虑到约束条件,先记为 α2new unclipped ,得:

带入(5)式子,得:

2.4 求得最终的对偶因子
以上求得的 α2new unclipped 没考虑约束条件:

当
和
异号时,也就是一个为1,一个为-1时,他们可以表示成一条直线,斜率为1。

横轴是
,纵轴是
,
和
既要在矩形方框内,也要在直线上,因此 L <= α2new <= H

最终得到的值:

再根据
得到 α1new :

2.5 临界情况的求值
对于大部分情况 η = K11 + K22 - 2K12 > 0 ,求解方式如上;但 η <= 0 , α2new 取临界点L或H。

当η<0时,目标函数为凸函数,没有极小值,极值在定义域边界处取得。
当η=0时,目标函数为单调函数,同样在边界处取极值。
计算方法:

3 启发式选取变量
3.1 对第一个变量的选取
第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT条件的αi作为第一个变量,接着依据相关规则选择第二个变量(见下面分析),对这两个变量采用上述方法进行优化。当遍历完整个样本集后,遍历非边界样本集(0<αi<C)中违反KKT的αi作为第一个变量,同样依据相关规则选择第二个变量,对此两个变量进行优化。当遍历完非边界样本集后,再次回到遍历整个样本集中寻找,即在整个样本集与非边界样本集上来回切换,寻找违反KKT条件的αi作为第一个变量。直到遍历整个样本集后,没有违反KKT条件αi,然后退出。

3.2 对第二个变量的选取
SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为α1,第二个变量的选择希望能使α2有较大的变化,由于α2是依赖于|E1−E2|,当E1为正时,那么选择最小的Ei作为E2,如果E1为负,选择最大Ei作为E2,通常为每个样本的Ei保存在一个列表中,选择最大的|E1−E2|来近似最大化步长。
4 阈值b的计算
每完成两个变量的优化后,都要对阈值 b 进行更新,因为关系到 f(x) 的计算,即关系到下次优化时计算。

这部分结束了,通过SMO算法解出的对偶因子的值,可以得到最优的超平面方程 f (x) = ωTx + b ,即对样本能够划分。以上大多借鉴了勿在浮沙筑高台的blog 文章,他写的已经很清晰,我只是在他的基础上
增加或删去不好理解的内容。下篇是对核函数和KKT条件的解释。
机器学习之支持向量机(四):支持向量机的Python语言实现
参考:
1 【机器学习详解】SMO算法剖析 http://blog.csdn.net/luoshixian099/article/details/51227754
2 支持向量机(五)SMO算法
机器学习之支持向量机(二):SMO算法的更多相关文章
- SVM-非线性支持向量机及SMO算法
SVM-非线性支持向量机及SMO算法 如果您想体验更好的阅读:请戳这里littlefish.top 线性不可分情况 线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,为了满足函数间隔大 ...
- 【机器学习详解】SMO算法剖析(转载)
[机器学习详解]SMO算法剖析 转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754 CSDN−勿在浮沙筑高台 本文力 ...
- 机器学习算法整理(七)支持向量机以及SMO算法实现
以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还 ...
- 支持向量机的smo算法(MATLAB code)
建立smo.m % function [alpha,bias] = smo(X, y, C, tol) function model = smo(X, y, C, tol) % SMO: SMO al ...
- 机器学习-SVM中的SMO算法详解
- 【机器学习】支持向量机(SVM)的优化算法——序列最小优化算法(SMO)概述
SMO算法是一一种启发式算法,它的基本思路是如果所有变量的解的条件都满足最优化问题的KKT条件,那么这个最优化问题的解就得到了.因为KKT条件是该优化问题的充分必要条件. 整个SMO算法包括两个部分: ...
- 机器学习——支持向量机(SVM)之Platt SMO算法
Platt SMO算法是通过一个外循环来选择第一个alpha值的,并且其选择过程会在两种方式之间进行交替: 一种方式是在所有数据集上进行单遍扫描,另一种方式则是在非边界alpha中实现单遍扫描. 所谓 ...
- 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法
前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...
- 支持向量机SMO算法实现(注释详细)
一:SVM算法 (一)见西瓜书及笔记 (二)统计学习方法及笔记 (三)推文https://zhuanlan.zhihu.com/p/34924821 (四)推文 支持向量机原理(一) 线性支持向量机 ...
随机推荐
- Windows10下用Anaconda3安装TensorFlow教程
这是我在自己的笔记本电脑上用Anaconda3安装TensorFlow的教程 1. 安装好Anaconda3版本 (1) 注:可以发现最新版本是Anaconda5了(没关系,下载就是了) (2) 注意 ...
- Python之数学(math)和随机数(random)
math包包含了最基本的数学运算函数,如果想要更加高级的数学功能,可以使用标准库外的numpy和scipy库,他们不但支持数组和矩阵运算, 还有丰富的数学和物理方程可供使用 random包可以用来生成 ...
- web、pc、wap、app的区别
通常情况下web=pc,wap=app,前者指电脑用的程序,后者指手机用的程序. 更深层的区别是,pc电脑上软件,web电脑上的网页,wap手机上的网页,app手机用软件
- 五、Html表单标签
表单,表单控件的主要作用就是收集用户体验,当用户提交表单时,用户输入的内容将作为请求参数提交到远程服务器. 1,form标签 <form>:创建表单,该元素不会生成可视化的界面,但是其他控 ...
- 用powershell实现:“倩女幽魂姥姥”版《语音报警系统》
------[第一章 前言]------ win7,及以上版本中,是自带语音库的,系统自带一套女声中文库,一套女声英文库.用powershell调用,从而发音,制作报警系统.是一件太简单的事情,只需要 ...
- awkOFS问题
awk改变了OFS,$0却没变化一个文件1.txt,内容如下 a b c d e 目的把列变行,输出为: a b c d e 脚本如下: awk 'BEGIN{RS="";FS=& ...
- 【ASP.NET Core】MVC中自定义视图的查找位置
.NET Core 的内容处处可见,刷爆全球各大社区,所以,老周相信各位大伙伴已经看得不少了,故而,老周不考虑一个个知识点地去写,那样会成为年度最大的屁话,何况官方文档也很详尽.老周主要扯一下大伙伴们 ...
- ABP官方文档翻译 6.6 Javascript API
JavaScript API AJAX 通知 消息 UI Block和Busy 事件总线 日志 其他实用功能 ABP提供了一套对象和函数,用来简化.标准化javascript的开发. 这里是ABP提供 ...
- How to fix “HTTP Status Code 505 – HTTP Version Not Supported” error?--转
http://dotnetstock.com/technical/http-status-code-505-http-version-not-supported/ The reason for the ...
- ASP.NET Core 入门
关于ASP.NET Core ASP.NET Core 是一个全新的开源.跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web 应用,IoT(Internet Of Things,物联 ...