在最开始讨论支持向量机的时候,我们就假定,数据是线性可分的,亦即我们可以找到一个可行的超平面将数据完全分开。后来为了处理非线性数据,使用 Kernel 方法对原来的线性 SVM 进行了推广,使得非线性的的情况也能处理。虽然通过映射 ϕ(⋅) 将原始数据映射到高维空间之后,能够线性分隔的概率大大增加,但是对于某些情况还是很难处理。例如可能并不是因为数据本身是非线性结构的,而只是因为数据有噪音。对于这种偏离正常位置很远的数据点,我们称之为 outlier ,在我们原来的 SVM 模型里,outlier 的存在有可能造成很大的影响,因为超平面本身就是只有少数几个 support vector 组成的,如果这些 support vector 里又存在 outlier 的话,其影响就很大了。例如下图:

用黑圈圈起来的那个蓝点是一个 outlier ,它偏离了自己原本所应该在的那个半空间,如果直接忽略掉它的话,原来的分隔超平面还是挺好的,但是由于这个 outlier 的出现,导致分隔超平面不得不被挤歪了,变成途中黑色虚线所示(这只是一个示意图,并没有严格计算精确坐标),同时 margin 也相应变小了。当然,更严重的情况是,如果这个 outlier 再往右上移动一些距离的话,我们将无法构造出能将数据分开的超平面来。

为了处理这种情况,SVM 允许数据点在一定程度上偏离一下超平面。例如上图中,黑色实线所对应的距离,就是该 outlier 偏离的距离,如果把它移动回来,就刚好落在原来的超平面上,而不会使得超平面发生变形了。具体来说,原来的约束条件

yi(wTxi+b)≥1,i=1,…,n

现在变成

yi(wTxi+b)≥1−ξi,i=1,…,n

其中 ξi≥0 称为松弛变量 (slack variable) ,对应数据点 xi 允许偏离的 functional margin 的量。当然,如果我们运行 ξi 任意大的话,那任意的超平面都是符合条件的了。所以,我们在原来的目标函数后面加上一项,使得这些 ξi 的总和也要最小:

min12∥w∥2+C∑i=1nξi

其中 C 是一个参数,用于控制目标函数中两项(“寻找 margin 最大的超平面”和“保证数据点偏差量最小”)之间的权重。注意,其中 ξ 是需要优化的变量(之一),而 C 是一个事先确定好的常量。完整地写出来是这个样子:

mins.t.,12∥w∥2+C∑i=1nξiyi(wTxi+b)≥1−ξi,i=1,…,nξi≥0,i=1,…,n

用之前的方法将限制加入到目标函数中,得到如下问题:

L(w,b,ξ,α,r)=12∥w∥2+C∑i=1nξi–∑i=1nαi(yi(wTxi+b)−1+ξi)–∑i=1nriξi

分析方法和前面一样,转换为另一个问题之后,我们先让 L 针对 w、b 和 ξ 最小化:

∂L∂w=0∂L∂b=0∂L∂ξi=0⇒w=∑i=1nαiyixi⇒∑i=1nαiyi=0⇒C−αi−ri=0,i=1,…,n

将 w 带回 L 并化简,得到和原来一样的目标函数:

maxα∑i=1nαi–12∑i,j=1nαiαjyiyj⟨xi,xj⟩

不过,由于我们得到 C−αi−ri=0 ,而又有 ri≥0 (作为 Lagrange multiplier 的条件),因此有 αi≤C ,所以整个 dual 问题现在写作:

maxαs.t.,∑i=1nαi–12∑i,j=1nαiαjyiyj⟨xi,xj⟩0≤αi≤C,i=1,…,n∑i=1nαiyi=0

和之前的结果对比一下,可以看到唯一的区别就是现在 dual variable α 多了一个上限 C 。而 Kernel 化的非线性形式也是一样的,只要把 ⟨xi,xj⟩ 换成 κ(xi,xj) 即可。这样一来,一个完整的,可以处理线性和非线性并能容忍噪音和 outliers 的支持向量机才终于介绍完毕了。 

Tags: Supervised Learning, Support Vector Machine

21 comments to 支持向量机:Outliers

  • david
    September 14th, 2010 at 12:14 am · Reply

    击节赞叹!

  • Chrysalis
    October 5th, 2010 at 10:19 pm · Reply

    目标函数中的参数C,就要用cross validation这样的方法来确定喽?

    (ps:这篇要是能再有一副图就更美了。针对文中现在那张图中的例子,如果用添加了松弛变量的SVM来求解会是什么样子。然后就能有比对了。)

    • pluskid
      October 5th, 2010 at 11:03 pm · Reply

      我是想画图的来着,但是图是用 Illustrator 画的,Illustrator 里面又没法像 LaTeX 那样输入字符 \xi (ξ) 来表示 slack variable 的距离,后来就索性不画了…… =.=bb

  • Chrysalis
    October 5th, 2010 at 10:49 pm · Reply

    我想就算在线性可分(或者在映射后空间内线性可分)的情况下,原始SVM和这种SVM的解都会不同吧。当然是跟C有关。如果C = 无穷大,那么就跟原始SVM相同;如果C = 0,那么W = 0。

    w = 0 是什么场景,真是有点儿难以想象呢。

    • pluskid
      October 5th, 2010 at 11:05 pm · Reply

      C 是参数,可以用 cross validation 来求。如果线性可分,C 取多少都无所谓,因为所有 slack variable 都是 0 。如果线性不可分,而 C=∞ 的话,就无解,或者说任意解,因为不管 w 取什么值,目标函数的值都是等于 ∞ 。

      • Chrysalis
        October 5th, 2010 at 11:33 pm · Reply

        不对吧,线性可分情况下C的多少会影响优化方程的最优解。为什么会所有的slack variable 一定等于0呢?

        有情况会是这样: 增加slack variable的量,虽然会增加优化方程中第二项所带来的penalty,但是同时也会增加margin值,而可能导致最终的优化方程值更优。

        所以最后可能会是slack varible不是0的解。

        • pluskid
          October 6th, 2010 at 12:08 am

          嗯,你说的有道理,确实是这样子的!

  • zz 支持向量机(support vector machine)系列 « retina
    October 15th, 2010 at 12:18 am · Reply

    […] 支持向量机: Outliers   http://blog.pluskid.org/?p=692 […]

  • poson
    November 14th, 2010 at 4:39 pm · Reply

    写的太好了!我见过最好的介绍了。

  • 颖风
    November 17th, 2010 at 8:02 pm · Reply

    描述C的作用是那句应该是“寻找margin最大的超平面”吧

    • pluskid
      November 17th, 2010 at 8:42 pm · Reply

      恩,确实是这样子,谢谢指出~~

  • Pupil » Blog Archive » zz支持向量机(support vector machine)
    November 25th, 2010 at 4:00 pm · Reply

    […] 支持向量机: Outliers   http://blog.pluskid.org/?p=692 […]

  • Free Mind:支持向量机:Kernel II | 丕子
    January 27th, 2011 at 8:44 am · Reply

    […] slack variable […]

  • 收藏两个系列看看,可以再加深理解 « Masonzms's Blog
    April 10th, 2011 at 9:38 am · Reply

    […] 支持向量机:Outliers —— 介绍支持向量机使用松弛变量处理 outliers 方法。 […]

  • Hualei
    February 28th, 2012 at 11:00 am · Reply

    请教博主一个问题:
    您用什么工具画的图?

  • zhuyue39381995
    March 10th, 2012 at 4:31 pm · Reply

    我也想知道博主用的是什么画图软件~~~

  • 星夜落尘
    May 8th, 2012 at 9:57 pm · Reply

    写的很清晰。
    大致能看懂,不过要是让自己去实现这个东西估计就一筹莫展了,真是悲剧。难道这就是传说中的眼高手低 ·.·

  • Maximilian
    November 16th, 2013 at 9:59 pm · Reply

    写的太好了,能把这么枯燥的东西介绍的这么生动,佩服的五体投地啊

  • LuffyMAO
    December 18th, 2013 at 6:31 am · Reply

    C越大的话。应该会拟合的越好吧。但是也可能会产生过拟合现象~

  • 好香的包子
    April 18th, 2014 at 6:52 pm · Reply

    将min f(x)转化为max L(…)的过程似乎应该被称作 wolfe dual 哦~~~ 另外鄙人不才 想补充一下 最后的拉格朗日方程中 新引入的拉格朗日系数r 也是为了保证距离参数为正~~ 最后想请教前辈一下 LIBSVM中的 gamma 到底是什么东西 各个kernel的方程不尽相同 很难想象这些核函数能有一个统一的系数 而且还必须要用户事先指定。。。

    • pluskid
      April 18th, 2014 at 10:50 pm · Reply

      谢谢。gamma 这样的 hyper parameter 在机器学习中还比较常见,如果没有办法确定的情况下一般是通过 cross validation 枚举选结果最好的一个参数。

支持向量机_4:Outliers相关推荐

  1. 支持向量机:Outliers

     支持向量机:Outliers by pluskid, on 2010-09-13, in Machine Learning     21 comments 本文是"支持向量机系列&qu ...

  2. 支持向量机(理论+opencv实现)

    从基础开始讲起,没有这些东西看支持向量机真的很难! 1.拉格朗日乘子(Lagrangemultiplier) 假设需要求极值的目标函数(objectivefunction)为f(x,y),限制条件为φ ...

  3. SVM支持向量机--sklearn研究

    Support vector machines (SVMs) are a set of supervised learning methods used for classification, reg ...

  4. 机器学习之手把手实现第1部分:支持向量机的原理和实现

    https://www.ibm.com/developerworks/cn/analytics/library/machine-learning-hands-on1-svn/index.html 本文 ...

  5. 支持向量机SVM 简要推导过程

    SVM 是一块很大的内容,网上有写得非常精彩的博客.这篇博客目的不是详细阐述每一个理论和细节,而在于在不丢失重要推导步骤的条件下从宏观上把握 SVM 的思路. 1. 问题由来 SVM (支持向量机) ...

  6. 机器学习基础——支持向量机

    前言    最开始接触SVM是在吴恩达的课程上,展示了一个例子:用SVM将人声从环境声中单独剥离出来.后来,在吴教授的Coursera机器学习课程中监督学习部分的末尾,讲述了SVM.但是他所讲述的SV ...

  7. 非线性回归模型(part2)--支持向量机

    学习笔记,仅供参考,有错必纠 PS : 本BLOG采用中英混合模式 非线性回归模型 支持向量机 SVMs are a class of powerful, highly flexible modelin ...

  8. 支持向量机概念图解_支持向量机:基本概念

    支持向量机概念图解 One of the Dual purposes Supervised Machine Learning Algorithms, serves as both a Regressi ...

  9. 数学建模算法:支持向量机_从零开始的算法:支持向量机

    数学建模算法:支持向量机 从零开始的算法 (Algorithms From Scratch) A popular algorithm that is capable of performing lin ...

  10. [机器学习-原理篇]支持向量机(SVM)深入理解

    支持向量机SVM 1,SVM概念 1.1 支持向量机包含三种: 2.准备知识 KKT条件 点到直线的距离 3. 线性可分支持向量机(hard margin) 线性可分支持向量机建立超平面: 函数间隔: ...

最新文章

  1. 分布式图处理引擎Graph Engine 1.0 预览版正式发布
  2. [翻译] JTCalendar
  3. 自定义动画——animate()
  4. AS主题+配置备份+Logcat颜色配置
  5. 【完结】12篇文章告诉你深度学习理论应该学到什么水平
  6. android 桌面文件夹ui美化
  7. 快速入门 Python 数据分析实用指南
  8. 敏捷开发 我的经验(一)基本概念
  9. 26_多线程_第26天(Thread、线程创建、线程池)
  10. BI的需求调研的方法分类
  11. 关于用Java写的贪吃蛇游戏的一些感想
  12. windows命令行大汇总
  13. webstrom配置一键修复ESLint的报错
  14. 【编程题 】年会抽奖(详细注释 易懂)
  15. 视频音频提取器推荐:快速提取视频中的音频!
  16. L2签证都有哪些福利待遇?
  17. 如何挑选属于自己的电脑
  18. Avaya G700 媒体网关
  19. oracle重新创建表空间,oracle 创建表空间,修改表空间,删除表空间
  20. “乐高式”自动驾驶研发开放平台,让开发更简单灵活高效

热门文章

  1. mysql查询表_mysql数据库表的查询操作-总结
  2. Android亮度调节
  3. gdal+python计算NDVI
  4. C++中自带的二分查找函数
  5. go包管理之vender机制
  6. CorelDRAW常用工具之涂抹工具
  7. 数字体育进入黄金窗口期
  8. 中国各省存贷款余额(2003-2020年)
  9. php文件是不是死链,怎么判断网站的链接是不是死链接? 百度搜索标准死链官方文档...
  10. uniapp之自定义顶部样式