学习笔记:SVM柔性边界的补充和SVR(支持向量回归)

作者 小刺猬yyx 关注

2016.08.06 10:31* 字数 1608 阅读 421评论 0喜欢 2

上一个笔记对于SVM不能完美分类的情况,之前并没有搞得很透彻。在学习SVR的时候,我又重新思考了一下关于SVM对于不能完美分类的情况,搞清楚SVM不可完美分类的情况之后,也就更容易理解SVR的美妙了。

SVM柔性边界

所谓柔性边界,就是会允许分类问题的不完美,能够包容一部分分类出现误差的情况,因为现实中往往会存在一些特例,或者我们不可能考虑到所有的影响因素,导致虽然满足了我们研究条件,但是依然输出不同于我们预测的情况。
SVM柔性边界的表达式:

柔性边界

与完美可分情况的SVM表达式:

完美可分

相比,我们发现如下以下区别[1]:

我们通过下图来说明柔性边界到底想要达到什么目的:

左边为完美可分,右边为柔性边界

可以看到,支持向量机真正确定的并不是一个超平面,而是沿着这个超平面的带状区间(在二维中,更高维就更抽象了,我也不知道长什么样,你们脑补吧)。而这个带状区间的宽度,在完美可分的情况下,就是两倍的几何距离,柔性边界呢就是把这个距离放大了,本来这个带状区域中没有训练样本,现在我允许可以有一些训练样本了,不等式中的1就是缩放后的带状区间的边界,现在训练样本满足的公式可以比这个边界小了,自然就是允许一部分训练样本点在带状区域里面了。

接下来我们通过来看拉格朗日乘子式来分析为什么这个方法是合理的,天才的,并来理解各个参数变量和KKT条件。

柔性边界的拉格朗日乘子式

我们对拉格朗日乘子式中各个变量求偏导:

至此关于SVM柔性边界的一些补充讨论就完成了,接下来说一下支持向量回归(SVR)

支持向量回归(SVR)

由支持向回归就是一种回归方法,就像最小二乘法,岭回归,梯度下降法一样,是一种方法,就像支持向量机也是一种方法,所以它们都不叫做模型,而是叫做支持向量机和支持向量回归。
支持向量回归是在我们做拟合时,采用了支持向量的思想,和拉格朗日乘子式的方式,来对数据进行回归分析的。相对于经济学领域常用的最小二乘法而言,它有诸多好处:

  • 最小二乘法只能用于线性回归,对于非线性模型则不再适用;而支持向量回归并没有这个限制
  • 最小二乘法对于具有多重共线性的变量之间的回归效果很差;而支持向量回归并不需要担心多重共线性问题
  • 支持向量回归对虽然不会在过程中直接排除异常点,但会是的由异常点引起的偏误更小。

所以,支持向量回归十分值得学习。下面上公式:

需要做回归的函数方程

问题转化:

表示出函数距离

其实上式就是表示出了回归函数和实际训练点之间的函数距离,对于式中定义的cost function,表述意义是允许模型由一定误差,误差范围内的点都认为是模型上的点,而只有那些在误差范围外,边界上的点才是确定模型的支持向量。由于存在SVM中类似柔性边界的考虑,于是引入松弛变量,得到支持向量回归如下:

转化成SVM求解问题

这里出现了两个不等式,因为我们没有分类结果{-1,1}来用乘积表示正负距离了,只能用绝对值,拆开绝对值符号之后,就会有两个不等式的约束条件。

以上便构成了支持向量回归的KKT条件,从条件中不难看出,我们选出的支持向量都是在认为符合回归情况范围之内的,和尽可能少的一部分超过边界的点,这样就排除了一部分的训练样本中的奇异点。
然后带入求解得到[2]:

求解

求得回归方程:

回归方程

回归方程中出现的K(xi,x)就是核(kernel)了,会有一些总结的比较好用的kernel,当然你的回归形式如果自己比较清楚,也可以换成你的回归方程。kernel可以使无限维特征向量的计算极大的简化,无论是线性还是非线性的问题满足一定条件就可以找到相应的kernel。不过这里并不会介绍kernel,因为kernel也是一个内容丰富的知识点,并且我也还没学习。
一直没写怎么求得最终结果,求解过程涉及到的都是启发式的算法,基本这些问题也是结合计算机使用的。这里提供一个r包的链接e1071,需要用到的可以去看看帮助。
支持向量机暂时写完了,我想其实这个过程中收获最大的是自己,逼着自己把各个条件推了一遍,写的过程中又发现本来以为理解其实并没理解的地方,又再思考了,以后会坚持写学习笔记的。


[1]:由于简书里不好编辑公式,所以这里我现在word上编辑好,再通过插入图片的方式以方便表达。 ↩

[2]:我在中间引用自己在word上编辑的内容时,可能公式中对应的符号有所变化,我相信这并不会给大家带来什么困扰:) ↩

svm和svr区别--摘自其它博客的更多相关文章

  1. laravel的启动过程---摘自网络博客个人学习之用

    如果没有使用过类似Yii之类的框架,直接去看laravel,会有点一脸迷糊的感觉,起码我是这样的.laravel的启动过程,也是laravel的核心,对这个过程有一个了解,有助于得心应手的使用框架,希 ...

  2. oracle 常用博客网址

    使用oradebug修改数据库scn – 提供专业ORACLE技术咨询和支持@Phone13429648788 - 惜分飞 Solaris上使用DTrace进行动态跟踪 老熊的三分地-Oracle及数 ...

  3. Bootstrap 实战之响应式个人博客 (一)

    一.示例 1.主页 2.博客详情页 3.在线地址 在线地址:入口 Addition:这里使用github-page将自己的静态项目免费部署到线上. 如果你只是做一些简单的静态项目做展示,付出这么大的时 ...

  4. 想学习找不到好的博客?看这里>>

    想学习找不到好的博客?看这里>> (ps:内容 + 作者) 基础数论知识整理--gyh 进阶数论知识整理--又是gyh 关于SPFA--lyj(终于不是gyh) 证明二次探测定理-Line ...

  5. 博客营销(Blog Marketing)

    一.什么是博客营销 博客营销(Blog Marketing)的概念可以说并没有严格的定义,简单来说,就是利用博客这种网络应用形式开展网络营销.要说明什么是博客营销,首先要从什么是博客说起. 博客(Bl ...

  6. 【nodejs笔记4】搭建多人博客<内含http请求的get post方法区别>

    功能分析 博客具有四个功能:注册  登录  登出  发表文章 界面设计 未登录: [主页  注册页  登录页] [主页] 主页 左侧 HOME                             ...

  7. Qt控制台和带窗口的区别_mickelfeng_新浪博客

    Qt控制台和带窗口的区别_mickelfeng_新浪博客     t控制台和带窗口的区别    (2012-04-30 10:50:53)    标签:    杂谈        分类: C/C    ...

  8. 【转】挟天子以令诸侯博客关于TCP/IP模型与OSI模型的区别

    挟天子以令诸侯 博客园 首页 新随笔 联系 订阅 管理 随笔 - 21  文章 - 0  评论 - 9 TCP/IP四层模型与OSI参考模型   TCP/IP四层模型: 1.链路层(数据链路层/网络接 ...

  9. docker mysql 数据持久化到本地、设置不区别表名大小写-清风柳絮-51CTO博客

    原文:docker mysql 数据持久化到本地.设置不区别表名大小写-清风柳絮-51CTO博客 Docker MySQL 把数据存储在本地目录,很简单,只需要映射本地目录到容器即可 1.加上-v参数 ...

随机推荐

  1. mysql安装使用详细教程

    1.数据库存储数据的方式与Excel类似. 一.数据库介绍 1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访 ...

  2. 【2016北京集训】crash的游戏

    Portal --> broken qwq Description 有个口袋,一开始里面有\(N\)个球,接下来进行\(M\)次操作,每次可以选择往里面放一个球或者从里面拿一个球出来,在这\(M ...

  3. laravel 5.1 单元测试 Cannot modify header information 错误

    运行phpunit的时候加上参数 --stderr ./vendor/bin/phpunit --stderr

  4. windows使用composer.phar

    把composer.phar复制到php安装目录下, 新建一个composer.bat文件,编辑 @php "%~dp0composer.phar" %* 保存,然后就可以使用co ...

  5. socket--粘包

    参考博客:http://www.cnblogs.com/kex1n/p/6502002.html 一.粘包现象 在上一篇的socket传输大数据文章中,我们可以顺利的接发数据,似乎做的不错,可以接收了 ...

  6. 替换换行符:回车换行CR/LF

    windows采用回车+换行CR/LF表示下一行,UNIX/Linux使用换行符LF表示下一行,MAC OS系统使用用回车符CR表示下一行. CR使用符号'\r'表示, ASCII码是13: LF使用 ...

  7. Android Studio 打包自定义apk文件名

    使用Android Studio打包的时候,我们有时候需要自定义apk的文件名,在此记录一下. 在app的build.gradle中,根节点下使用关键词def声明一个全局变量,用于获取打包的时间,格式 ...

  8. SpringCloud学习(4)——Ribbon负载均衡

    Ribbon概述 SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. 简单的说, Ribbon是Netflix发布的开源项目, 主要功能是提供客户端软 ...

  9. ASP.NET MVC4+EasyUI+EntityFrameWork5权限管理系统——数据库的设计(一)

    快一年没写博客了,这段时间感觉好迷茫,写点博客,记录一下自己的成长过程,希望对大家也有帮助 先上图 一个用户可以有多个角色,一个用户可以属于多个部门,这些都可以控制到权限,有时特殊要求,同样的部门和角 ...

  10. Debian最完美安装flash的教程//适用于所有linux版本

    话说不管是新手还是老手,都离不开flash.没有flash的支持,菜鸟们也少了一些把玩linux的动力. flash有很多安装的方法,不过性能相差很大.这里的缘由就不重要了. 下面我介绍在chromi ...