支持向量机:Outliers

by pluskid, on 2010-09-13, in Machine Learning     21 comments

本文是“支持向量机系列”的第四篇,参见本系列的其他文章。

在最开始讨论支持向量机的时候,我们就假定,数据是线性可分的,亦即我们可以找到一个可行的超平面将数据完全分开。后来为了处理非线性数据,使用 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–12i,j=1nαiαjyiyj⟨xi,xj

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

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

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

支持向量机:Outliers相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. SVM支持向量机通俗导论(理解SVM的三层境界)

    神文 转自july:http://blog.csdn.net/v_july_v/article/details/7624837 支持向量机通俗导论(理解SVM的三层境界) 作者:July .致谢:pl ...

最新文章

  1. linux系统与内核,[科普] Linux 的内核与 Linux 系统之间的关系
  2. 使用PHP顶替JS有趣DOM
  3. Java web 初入
  4. boost::lambda::ret用法的测试程序
  5. SOA的缺陷及其与微服务的关系
  6. mysql5.7过滤重复数据_MySQL5.7 设置同步复制过滤不用重启mysql服务进程了
  7. eclipse 输入提示插件_【STM32】搭建基于Eclipse平台的STM32调试环境
  8. 聚类(2)-- Fuzzy k-means clustering
  9. 运维是否有前(钱)途?
  10. Python Qt GUI设计简介、环境下载和安装(基础篇—1)
  11. 贾扬清谈云原生 - 让数据湖加速迈入3.0时代
  12. 各种区块链浏览器的地址总汇
  13. vant list 分页问题
  14. 深度学习和并行化实现
  15. matlab中Rip是什么意思,rip什么意思
  16. 尼日利亚区块链专家认为加密货币可提振非洲经济
  17. (Sentinel-2A、Sentinel-2B)2017年全年中国地区数据
  18. Latex/WinEdt中文编辑
  19. UVM:寄存器模型 构建
  20. 情人节程序员用HTML网页表白【情人节表白网页】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript

热门文章

  1. python怎么画多重饼状图_Python通过matplotlib画双层饼图及环形图简单示例
  2. java程序不能编译_救命-JAVA程序不能编译!
  3. ubuntu linux 编译 opencv
  4. java组件化的优势_组件化编程开发如何判断组件的优劣性
  5. java todo error_java基础-异常
  6. 1 文巾解题 191. 位1的个数
  7. python函数整理
  8. tableau必知必会之通过服务器视图的全屏实现多媒体展示
  9. SpringBoot 源码解析——如何进行源码环境调试?
  10. SQL 语句快速参考