支持向量机SVM
SVM(Support Vector Machine)有监督的机器学习方法,可以做分类也可以做回归。SVM把分类问题转化为寻找分类平面的问题,并通过最大化分类边界点距离分类平面的距离来实现分类。
有好几个模型,SVM基本,SVM对偶型,软间隔SVM,核方法,前两个有理论价值,后两个有实践价值。下图来自龙老师整理课件。

基本概念
线性SVM,线性可分的分类问题场景下的SVM。硬间隔。
线性不可分SVM,很难找到超平面进行分类场景下的SVM。软间隔。
非线性SVM,核函数(应用最广的一种技巧,核函数的选择十分重要)。
SVR(支持向量回归)。可以做回归。
SVC,用SVM进行分类。
一、硬间隔的支持向量机
假设函数:可以与LR类比,只是外面是套的符号函数,wx+b>0认为是正类,wx+b<0认为是负类。

损失函数:
从中挑选出最好的能分离黑点点和白点点的直线(分离边界),是硬间隔所要解决的问题。
直观上:我们认为处在两个样本正中间的位置的分离边界最好。理论上,对训练样本的局部扰动的容忍性最好,鲁棒性最好,泛化能力好。几何上,两类支持向量的中间垂面。
几何上:如下图所示,当考虑样本的误差增大时(认为所有样本的误差一样大),能完全分开圈圈和叉叉的直线减少。下图第一排等价于下图第二排。其实支持向量就是被下面那行胖胖的线穿过的点,只是这些点在高纬空间中对应着向量,所以叫支持向量。优化的目标就是找到一条最胖的线,刚好穿过我们的样本,同时又能把所有样本分离开,而那条胖胖线的中垂线,就是我们要找的直线,其实这样是考虑容错率,计算真实的样本测量错了,仍然能够分隔开;最胖的线左边和右边的距离就叫做间隔。间隔空间之内没有任何样本,即硬间隔。线的左边是一类样本,线的右边是另一类样本。

数学上:
那条中垂线:WtX+b=0,根据假设函数而来,既不为正,也不为负值。Wt为超平面法向量,法向量实际上就是与中垂线垂直的那个方向(想想b是标量,求解x,实际上能看出w与x就是垂直的,即内积,只是这里叫法向量)。b为原点到超平面的有向距离的放缩。w/|w|*x实际上就是内积,几何上就是投影(点到线的距离)。如果w和b同时放缩任意比例,原超平面不变。所以可以同时除以||w||。


圈圈到超平面的距离,是胖胖线的一半r。叉叉到超平面的距离也是胖胖线的一半,但是是负向 -r。任意一点到超平面的距离大于r时,yi等于+1,属于正类,任意一点到超平面的距离小于-r时,属于负类。而我们的目标就是最大化r 同时要满足,将两类进行分割,所以有如下约束条件,具体如下。

在此基础上,不妨另1/|W|=r,可以简化目标函数。其实损失函数就是对最优化的理解、对误差的理解、对数据的理解,根据这些而设计出来的。

而最终目标函数的求解,是一个在一次约束下,求二次最优的过程,即一个典型的凸二次规划问题,所以肯定是可以求解的,对偶方法可以求解。
综合以上SVM的推导过程如下:首先假设是线性可分的,由此我们有一定的几何判断和认识,基于该几何判断和认识下,通过逆推法,我们假设找到了这个最优的分离边界,应该满足哪些特点,包括需要知道点到面的几何距离的概念,变量又比较多,最终通过一个减少变量法,然后就得到了优化目标函数。


因为原问题为凸优化,所以原问题的凸优化问题与拉格朗日函数鞍点(又不是最大值又不是最小值,梯度是0的点),对偶函数(转化为对w,b求导)的凸优化问题的解一致。之所以还转化为对偶,就是为了好求。原问题是拉格朗日函数,在固定了w,b条件下,最大拉格朗日系数α条件下求解拉格朗日函数最小。对偶问题,是固定α,最小化w,b,这样通过求导可以算出w,b与α之间的关系,进而将目标函数转化为只有α,y,x。

根据KKT条件可知,需要满足yi*f(xi)=1,而满足这个条件的点,就是上文提到的支持向量点,f(x)是假设函数。
假设函数只与支持向量有关,更加体现了几何意义。SVM不受那种离分隔边界很远的极值点的影响,哪怕有个很远的叉叉点,对分离边界也不会有影响,而逻辑回归则会受影响。


硬间隔的局限性:
不一定分类完全正确的超平面最好
样本数据本身线性不可分

二、软间隔的支持向量机
正因为由上面硬间隔支持向量机的局限性,才有了软间隔支持向量机,一般实际中都不会用硬间隔,因为一般都不可能完全线性可分。软间隔支持向量机考虑了在间隔中间的点,以及间隔外被错分类的点,这些点都是支持向量点,都要计算损失函数。而之前硬间隔是要找到完全分开的分隔边界。



上面的损失函数,除以C可以类比于逻辑回归的损失函数,左边是正则项,右边是hinge损失函数(当
>1则没有任何损失,当
<1则有损失)。C越小考虑的点越多。C越大是硬间隔。
与上文一样,根据拉格朗日,用α表示w,b,求解损失函数最小:

看KKT条件,得出以下结论:

三、 核函数
核函数处理线性不可分问题。核函数目的就是使得线性不可分的问题,用非线性的边界更好的分离开。

核函数即为下图的,把原来的x映射到高纬空间的
,原来可能是10维*10维,映射到高维空间可能是100维*100维,但通过kernel技巧,两个高维
的内积可以转化为低维x的内积,大大简化了计算。核函数就是为了映射到高维空间求内积而产生的,而我们上面的提到分离边界要是曲线,就必须是高维,而同时我们的损失函数就是内积的一个函数,所以这就完美的解决了上面的问题呢~把上面wx+b都可以转化为w
+b。在原来样本做一个无穷维的空间映射,再做分类。下图为多项式核。


另一个应用广泛的核函数(径向基核函数,也称为高斯核)如下,可以映射到无限高维空间。


四、 LR与SVM的异同
相同:都可以做分类;假设函数都是连续、线性的wx+b,只是一个在外面套了simoid函数,一个套了sign函数;正则项处理方式类似。
不同:SVM要考虑支持向量本身,而逻辑回归是不只考虑支持向量,而考虑所有点。损失函数不一样,一个叫对数几率损失函数,一个是hinge损失函数。支持向量机要用对偶法,逻辑回归没必要用对偶法。硬间隔的SVM,的损失函数是有约束条件下的凸优化问题(所以不能用梯度下降法,而要考虑对偶法等考虑约束的最优化求解方法),而逻辑回归是没有约束条件下的凸优化问题(所以可以用梯度下降法,走到的一定是最优点)。逻辑回归比较好解释,SVM没有那么好解释。
在线性边界情况,LR与SVM效果差不多,在非线性分离边界,SVM由于有核技巧,所以分得会更好点,但也有可能过拟合,核函数的选择时关键而且很复杂。
优点:可以解决小样本下机器学习问题;提高泛化性能;可以解决文本分类、文字识别、图像分类等方面受欢迎;避免神经网络结构选择和局部极小值问题。
缺点:缺失值敏感;内存消耗大,难以解释。
Python:
在Python中SVM包天生就带了正则,而LR需要自己添加正则,如果不加的化鲁棒性会差。

SVC中的参数,C就是损失函数里面那个C;class_weigh是类别的权重;kernel选择核函数;最大迭代次数-1指的是无穷大;probability是否需要输出概率形式;tol损失函数要收敛到一个合适的值,前后两个损失函数的差距小于tol就收敛。

支持向量机SVM的更多相关文章
- 【IUML】支持向量机SVM
从1995年Vapnik等人提出一种机器学习的新方法支持向量机(SVM)之后,支持向量机成为继人工神经网络之后又一研究热点,国内外研究都很多.支持向量机方法是建立在统计学习理论的VC维理论和结构风险最 ...
- 机器学习:Python中如何使用支持向量机(SVM)算法
(简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...
- 以图像分割为例浅谈支持向量机(SVM)
1. 什么是支持向量机? 在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...
- 机器学习算法 - 支持向量机SVM
在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM. SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果. [案 ...
- 机器学习之支持向量机—SVM原理代码实现
支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...
- 支持向量机SVM——专治线性不可分
SVM原理 线性可分与线性不可分 线性可分 线性不可分-------[无论用哪条直线都无法将女生情绪正确分类] SVM的核函数可以帮助我们: 假设‘开心’是轻飘飘的,“不开心”是沉重的 将三维视图还原 ...
- 一步步教你轻松学支持向量机SVM算法之案例篇2
一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...
- 一步步教你轻松学支持向量机SVM算法之理论篇1
一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...
- OpenCV 学习笔记 07 支持向量机SVM(flag)
1 SVM 基本概念 本章节主要从文字层面来概括性理解 SVM. 支持向量机(support vector machine,简SVM)是二类分类模型. 在机器学习中,它在分类与回归分析中分析数据的监督 ...
- OpenCV支持向量机(SVM)介绍
支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...
随机推荐
- jdbcTemplate之jdbc模板技术
1:为什么要使用jdbcTemplate? 在实际开发中使用jdbc技术太过复杂,为了减少代码冗余,操作简单 步骤一:创建实体类 package beans; public class Book { ...
- redis 学习笔记(1)-编译、启动、停止
一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先到这里下载Stable稳定版,目前最新版本是2.8 ...
- thrift中的超时(timeout)坑
最近在项目中采用thrift作为后台服务rpc框架,总体用下来性能还不错,跨语言特性使用起来也还行,但是也遇到了一些坑,其中之一就是超时问题(timeout),如果服务端些的某些业务场景耗时较长,th ...
- css的命名规则
本文转载自谈笑涧<css的命名规则> 操作系统版本:Windows 7 浏览器版本:IE6,IE7,IE8,Firefox 3.6.2,Safari 4.0.4,Chrome 5.0.35 ...
- Editplus常用快捷键
EditPlus 快捷键的使用 如果一个来你们公司面试程序员,连Ctrl + C 和Ctrl + V 都不用,而是使用“选中文本”→ 鼠标右键 → [复制],然后再鼠标右键→ [粘贴].你会不会录用他 ...
- FineUI(专业版)实现百变通知框(无JavaScript代码)!
博客园已经越来越不公正了,居然说我这篇文章没有实质的内容!! 我其实真的想问哪些通篇几十个字,没任何代码和技术分享,嚷嚷着送书的文章的就能雄霸博客园首页几天,我这篇文章偏偏就为管理员所容不下. 其实我 ...
- linq distinct 不够用了!
问题引出:在实际中遇到一个问题,要进行集合去重,集合内存储的是引用类型,需要根据id进行去重.这个时候linq 的distinct 就不够用了,对于引用类型,它直接比较地址.测试数据如下: class ...
- mysql CREATE USER
CREATE USER 'Rhine'@'%' IDENTIFIED BY 'Rhine@2015'; GRANT ALL ON *.* TO 'Rhine'@'%'; flush privilege ...
- maven环境配置+eclipse环境配置
一 . (1),下载maven 有点类似于tomcat 解压后就可以用 ,不用安装 (2), 配置环境变量 在系统变量的path 中添加 E:\01Server\maven\bin 注意是bi ...
- linux/ubuntu查看内核版本命令
打开终端,输入: uname -a