机器学习经典算法笔记-Support Vector Machine SVM
可供使用现成工具:Matlab SVM工具箱、LibSVM、SciKit Learn based on python
一 问题原型
解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。
如图所示的二分类问题,A,B为决策面(二维空间中是决策线),每个决策面对应一个线性分类器方案,分类间隔越大则SVM分类器的性能越优(A>B),而具有最大间隔的分类方案则是最优决策面。SVM正是要寻找这样的最优解,虚线穿过的向量点就是支撑向量(对应A有三个支撑向量,一红二蓝)。优化对象看上去似乎成了决策面的方向和位置参数,实际上最终却是由支撑向量的选择所决定的!所以本质上,SVM依然是一个最优化问题。
二 数学建模
1.建立超平面方程: w控制斜率,r控制截距
2.分类间隔d的计算
则目标为追求d的最大化
三 约束条件
1.是否存在一个决策面,能够将所有的样本点都正确分类?
2.决策面方向已经确定的前提下,为了保证决策面在间隔空间的中间,所以截距r也不是自由化的,受决策面方向和样本点分布的约束
3.确定了方向和截距,则支撑向量点受约束,不是任意的
为每个样本点添加一个标签 Y使得:
则决策面方程的正确分类可表示为:
假设决策面正好处于间隔区域的中轴线上,则方程变形为:
同时除以d:
则SVM优化的基本约束可以被描述为:对于存在分类间隔的两类样本点,我们一定可以找到一些决策面,使其对于所有的样本点均满足下面的条件:
只有在xi是对应决策面的支撑向量时,等号才能成立
(分子绝对值为1)
由此,SVM的优化任务从找到一组参数ω、γ使得分类间隔W=2d最大化,转变为||ω||的最小化问题,也等效于1/2||ω||²的最小化问题
数学描述:
直观点来看,目标函数相当于让分隔面的间隙(d)最大化,同时约束条件保证了分类的正确性
固定w方向,对正样本来说,可以找到wx+b1=0,满足所有正样本在线的一侧
对负样本 找到wx+b2=0满足所有负样本在线的一侧(与上面线平行)
调整w大小,得到b1-b2 = 2 取b=b1-b2 -1 则得到中间分隔超平面wx+b = 0
四 函数间隔和几何间隔
在超平面w*x+b=0确定的情况下,|w*x+b|能够表示点x距离超平面的远近,而通过观察w*x+b的符号与类标记y的符号是否一致可判断分类是否正确,所以,可以用(y*(w*x+b))的正负性来判定或表示分类的正确性。于此,我们便引出了函数间隔(functional margin)的概念:
而超平面(w,b)关于T中所有样本点(xi,yi)的函数间隔最小值(其中,x是特征,y是结果标签,i表示第i个样本),便为超平面(w, b)关于训练数据集T的函数间隔:
如果成比例的改变w和b(如将它们改成2w和2b),则函数间隔的值f(x)却变成了原来的2倍(虽然此时超平面没有改变),所以只有函数间隔还远远不够。假定对于一个点 x ,令其垂直投影到超平面上的对应点为 x0 ,w 是垂直于超平面的一个向量,为样本x到超平面的距离
几何间隔就是函数间隔除以||w||,而且函数间隔y*(wx+b) = y*f(x)实际上就是|f(x)|,只是人为定义的一个间隔度量,而几何间隔|f(x)|/||w||才是直观上的点到超平面的距离。
函数间隔不适合用来最大化间隔值,因为在超平面固定以后,可以等比例地缩放w的长度和b的值,这样可以使得的值任意大,亦即函数间隔可以在超平面保持不变的情况下被取得任意大。但几何间隔因为除上了,使得在缩放w和b的时候几何间隔的值是不会改变的,它只随着超平面的变动而变动,因此,这是更加合适的一个间隔。换言之,这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔。
如果令函数间隔等于1,得到优化目标:,和上面推导出来的优化目标函数
形态一致。对于支撑向量,约束条件满足等号,非支撑向量,应>1。
SVM问题为典型的凸二次优化问题,可用QP (Quadratic Programming) ,SMO优化包进行求解。
五 核函数
引入核函数,将数据映射到高维空间解决线性不可分
核是一个函数K,对所有x,z(-X,满足,这里φ是从X到内积特征空间F的映射。
如图所示的样本:超平面为圆方程(也既二次曲线方程)
如果我们构造另外一个五维的空间,其中五个坐标的值分别为
那么显然,上面的方程在新的坐标系下可以写作:Z那么显然,上面的方程在新的坐标系下可以写作:
如果我们做一个映射将X照上面的规则映射为Z,那么在新的空间中原来的数据将变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是 Kernel 方法处理非线性问题的基本思想。
所以核函数将原始目标函数映射为,并求解对偶问题:
几种常见核函数:
- 多项式核:该空间的维度是,其中m是原始空间的维度
- 高斯核:可能会将原始空间映射成无穷维,不过参数选取很大的话,高次特征上的权重衰减很快,实际上还是相当于一个低维子空间,很小则可以将任意数据映射为线性可分,但同时带来严重的过拟合问题!
高斯核示意图
- 线性核:原始空间中的内积
核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上
六 松弛变量
为处理一些特殊点导致超平面线性不可分的情况,引入了松弛变量的概念
图中最上面的蓝色点导致原本较为完美的决策平面扭曲,SVM 允许数据点在一定程度上偏离一下超平面。例如上图中,黑色实线所对应的距离,就是该 outlier 偏离的距离,如果把它移动回来,就刚好落在原来的 超平面 蓝色间隔边界上,而不会使得超平面发生变形了。
原约束条件中加入松弛变量
原目标函数需要使得各松弛变量总和最小
完整模型:
七 对偶问题
直接对目标函数进行优化求解很困难,使用拉格朗日乘子法得到“对偶问题”
$L(\omega,\beta,\alpha) = 1/2||\omega||^2 + \sum_{i=1}^m\alpha_i(1-y_i(\omega^Tx_i + \beta))$ 其中$\alpha_i$为拉格朗日乘子。于是令该式分别对$\omega$和$\beta$求偏导并取0值,得到:
$\omega = \sum_{i=1}^m\alpha_iy_ix_i$ $0=\sum_{i=1}^m\alpha_iy_i$ 将二式代入原式,消去$\omega$和$\beta$得到对偶问题:
$\max_\alpha \sum_{i=1}^m\alpha_i - 1/2\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j$
$s.t \sum_{i=1}^m\alpha_iy_i = 0$ $\alpha_i >=0, i=1,2,3....m$
机器学习经典算法笔记-Support Vector Machine SVM的更多相关文章
- 【机器学习实战】第6章 支持向量机(Support Vector Machine / SVM)
第6章 支持向量机 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/lates ...
- 机器学习之支持向量机(Support Vector Machine)
转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 支持向量机 支持向量机(support vector machines,SVMs)是一种二类分类模型.它的基本模型是 ...
- 故事描述SVM----支持向量机/support vector machine (SVM)
作者:简之链接:https://www.zhihu.com/question/21094489/answer/86273196来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)
此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法.SMO由微软研究院的 ...
- 支持向量机 support vector machine
SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...
- 机器学习算法 --- SVM (Support Vector Machine)
一.SVM的简介 SVM(Support Vector Machine,中文名:支持向量机),是一种非常常用的机器学习分类算法,也是在传统机器学习(在以神经网络为主的深度学习出现以前)中一种非常牛X的 ...
- 机器学习技法笔记:01 Linear Support Vector Machine
Roadmap Course Introduction Large-Margin Separating Hyperplane Standard Large-Margin Problem Support ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- 支持向量机SVM(Support Vector Machine)
支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...
随机推荐
- CodeForces - 462B Appleman and Card Game
是一道简单题 将字母从个数多到小排序 然后 再按题目算法得到最多 但是注意 数据类型声明 money要为long long #include <iostream> #include < ...
- BZOJ1700: [Usaco2007 Jan]Problem Solving 解题
每月m<=1000块钱,有n<=300道题,要按顺序做,每月做题要花钱,花钱要第一个月预付下个月立即再付一次,给出预付和再付求最少几个月做完题,第一个月不做. 神奇的DP..竟没想出来.. ...
- 给你两个字符串str1,str2,找出str2在str1中的位置
如题 题目参考链接: http://blog.csdn.net/hxz_qlh/article/details/14110221 代码来自非原创 #include <iostream> # ...
- Netty 4.0 新的特性及需要注意的地方
Netty 4.0 新的特性及需要注意的地方 这篇文章和你一起过下Netty的主发行版本的一些显著的改变和新特性,让你在把你的应用程序转换到新版本的时候有个概念. 项目结构改变 Netty的包名从or ...
- Codechef-ANCESTOR(树套树/CDQ分治)
题意: 给定两棵有根树,各有 N 个点.两棵树上的点分别被从 1 到 N 标号.两棵树的根均为标号为 1 的节点. 你的任务非常简单:对于每个 i,找到一个 j(j != i),使得在两棵树中 j 都 ...
- Java基础教程:tutorialspoint-java
来自turorialspoint的Java基础教程(英文),官网:https://www.tutorialspoint.com/java/index.htm 这个教程在国内已经被翻译成中文(不过是属于 ...
- C# Queue与RabbitMQ的爱恨情仇(文末附源码):Q与MQ消息队列简单应用(二)
上一章我们讲了队列( Queue),这一章我们讲Message Queue消息队列,简称MQ. 定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开 ...
- centos7下cp -rf总是提示覆盖的解决办法
发现每次执行cp命令,其实是执行了cp -i命令的别名,因此无论怎么输入都提示是否覆盖. cat ~/.bashrc,有“alias cp='cp -i'”,难怪如此!!! 添加#号,#alias c ...
- SQL 快速参考
SQL 快速参考 SQL 语句 语法 AND / OR SELECT column_name(s)FROM table_nameWHERE conditionAND|OR condition ALTE ...
- Android开发:怎样隐藏自己的app应用
本文主要介绍怎样通过改动AndroidManifest.xml清单文件来达到隐藏自身应用的目的,不是隐藏第三方应用.为了不浪费大家时间.特此说明. 转载请注明作者xiong_it和链接:http:// ...