文章引自pluskid于2010年发表于“Machine Learning”板块,本文仅做编辑。

1.啥是支持向量机

支持向量机即  Support Vector Machine ,简称 SVM 。我最开始听说这头机器的名号的时候,一种神秘感就油然而生,似乎把 Support 这么一个具体的动作和 Vector 这么一个抽象的概念拼到一起,然后再做成一个 Machine ,一听就很玄了!
不过后来我才知道,原来 SVM 它并不是一头机器,而是一种算法,或者,确切地说,是一类算法,当然,这样抠字眼的话就没完没了了,比如,我说 SVM 实际上是一个分类器 (Classifier) ,但是其实也是有用 SVM 来做回归 (Regression) 的。所以,这种字眼就先不管了,还是从分类器说起吧。

SVM 一直被认为是效果最好的现成可用的分类算法之一(其实有很多人都相信,“之一”是可以去掉的)。这里“现成可用”其实是很重要的,因为一直以来学术界和工业界甚至只是学术界里做理论的和做应用的之间,都有一种“鸿沟”,有些很 fancy 或者很复杂的算法,在抽象出来的模型里很完美,然而在实际问题上却显得很脆弱,效果很差甚至完全 fail 。而 SVM 则正好是一个特例——在两边都混得开。

2.SVM基本理论

好了,由于 SVM 的故事本身就很长,所以废话就先只说这么多了,直接入题吧。当然,说是入贴,但是也不能一上来就是 SVM ,而是必须要从线性分类器开始讲。

这里我们考虑的是一个两类的分类问题,数据点用 x 来表示,这是一个 n 维向量,而类别用 y 来表示,可以取 1 或者 -1 ,分别代表两个不同的类(有些地方会选 0 和 1 ,当然其实分类问题选什么都无所谓,只要是两个不同的数字即可,不过这里选择 +1 和 -1 是为了方便 SVM 的推导,后面就会明了了)。一个线性分类器就是要在 n 维的数据空间中找到一个超平面,其方程可以表示为

wTx+b=0

一个超平面,在二维空间中的例子就是一条直线。我们希望的是,通过这个超平面可以把两类数据分隔开来,比如,在超平面一边的数据点所对应的 y 全是 -1 ,而在另一边全是 1 。具体来说,我们令 f(x)=wTx+b ,显然,如果 f(x)=0 ,那么 x 是位于超平面上的点。我们不妨要求对于所有满足 f(x)<0 的点,其对应的 y 等于 -1 ,而 f(x)>0 则对应 y=1的数据点。当然,有些时候(或者说大部分时候)数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在,不过关于如何处理这样的问题我们后面会讲,这里先从最简单的情形开始推导,就假设数据都是线性可分的,亦即这样的超平面是存在的。

如图所示,两种颜色的点分别代表两个类别,

红颜色的线表示一个可行的超平面。在进行分类的时候,我们将数据点 x代入 f(x) 中,如果得到的结果小于 0 ,则赋予其类别 -1 ,如果大于 0 则赋予类别 1 。如果 f(x)=0,则很难办了,分到哪一类都不是。事实上,对于 f(x) 的绝对值很小的情况,我们都很难处理,因为细微的变动(比如超平面稍微转一个小角度)就有可能导致结果类别的改变。理想情况下,我们希望 f(x) 的值都是很大的正数或者很小的负数,这样我们就能更加确信它是属于其中某一类别的。

从几何直观上来说,由于超平面是用于分隔两类数据的,越接近超平面的点越“难”分隔,因为如果超平面稍微转动一下,它们就有可能跑到另一边去。反之,如果是距离超平面很远的点,例如图中的右上角或者左下角的点,则很容易分辩出其类别。

实际上这两个 Criteria 是互通的,我们定

义 functional margin 为 γˆ=y(wTx+b)=yf(x),注意前面乘上类别 y 之后可以保证这个 margin 的非负性(因为 f(x)<0 对应于 y=−1 的那些点),而点到超平面的距离定义为 geometrical margin 。不妨来看看二者之间的关系。如图所示,对于一个点 x ,令其垂直投影到超平面上的对应的为 x0 ,由于 w 是垂直于超平面的一个向量(请自行验证),我们有

x=x0+γw∥w∥

又由于 x0 是超平面上的点,满足 f(x0)=0 ,代入超平面的方程即可算出

γ=wTx+b∥w∥=f(x)∥w∥

不过,这里的 γ 是带符号的,我们需要的只是它的绝对值,因此类似地,也乘上对应的类别 y即可,因此实际上我们定义 geometrical margin 为:

γ˜=yγ=γˆ∥w∥

显然,functional margin 和 geometrical margin 相差一个 ∥w∥ 的缩放因子。按照我们前面的分析,对一个数据点进行分类,当它的 margin 越大的时候,分类的 confidence 越大。对于一个包含 n 个点的数据集,我们可以很自然地定义它的 margin 为所有这 n 个点的 margin 值中最小的那个。于是,为了使得分类的 confidence 高,我们希望所选择的 hyper plane 能够最大化这个 margin 值。 不过这里我们有两个 margin 可以选,不过 functional margin 明显是不太适合用来最大化的一个量,因为在 hyper plane 固定以后,我们可以等比例地缩放 w 的长度和 b 的值,这样可以使得 f(x)=wTx+b 的值任意大,亦即 functional margin γˆ 可以在 hyper plane 保持不变的情况下被取得任意大,而 geometrical margin 则没有这个问题,因为除上了 ∥w∥这个分母,所以缩放 w 和 b 的时候 γ˜ 的值是不会改变的,它只随着 hyper plane 的变动而变动,因此,这是更加合适的一个 margin 。这样一来,我们的 maximum margin classifier 的目标函数即定义为

maxγ˜

当然,还需要满足一些条件,根据 margin 的定义,我们有

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

其中 γˆ=γ˜∥w∥ ,根据我们刚才的讨论,即使在超平面固定的情况下,γˆ 的值也可以随着 ∥w∥ 的变化而变化。由于我们的目标就是要确定超平面,因此可以把这个无关的变量固定下来,固定的方式有两种:一是固定 ∥w∥ ,当我们找到最优的 γ˜ 时 γˆ 也就可以随之而固定;二是反过来固定 γˆ ,此时 ∥w∥ 也可以根据最优的 γ˜ 得到。处于方便推导和优化的目的,我们选择第二种,令 γˆ=1 ,则我们的目标函数化为:

max1∥w∥,s.t.,yi(wTxi+b)≥1,i=1,…,n

通过求解这个问题,我们就可以找到一个 margin 最大的 classifier ,如下图所示,中间的红色线条是 Optimal Hyper Plane ,另外两条线到红线的距离都是等于 γ˜ 的:

到此为止,算是完成了 Maximum Margin Classifier 的介绍,通过最大化 margin ,我们使得该分类器对数据进行分类时具有了最大的 confidence (实际上,根据我们说给的一个数据集的 margin 的定义,准确的说,应该是“对最不 confidence 的数据具有了最大的 confidence”——虽然有点拗口)。不过,到现在似乎还没有一点点 Support Vector Machine 的影子。很遗憾的是,这个要等到下一次再说了,不过可以先小小地剧透一下,如上图所示,我们可以看到 hyper plane 两边的那个 gap 分别对应的两条平行的线(在高维空间中也应该是两个 hyper plane)上有一些点,显然两个 hyper plane 上都会有点存在,否则我们就可以进一步扩大 gap ,也就是增大 γ˜ 的值了。这些点呢,就叫做 support vector ,嗯,先说这么多了。

SVM熟练到精通1:初识SVM相关推荐

  1. SVM熟练到精通2:SVM目标函数的dual优化推导

    文章引自pluskid于2010年发表于"Machine Learning"板块,本文仅做编辑. 1.SVM的数学原理 上一次介绍支持向量机,结果说到 Maximum Margin ...

  2. SVM熟练到精通5:MATLAB实例

    1.源代码 clc; clear all; close all; load fisheriris; %matlab自带分类数据集fisheriris,来源于http://archive.ics.uci ...

  3. SVM熟练到精通4:偏离点与松弛变量

    文章引自pluskid于2010年发表于"Machine Learning"板块,本文仅做编辑. 1.回顾 在最开始讨论支持向量机的时候,我们就假定,数据是线性可分的,亦即我们可以 ...

  4. SVM熟练到精通3:核函数与非线性分类

    文章引自pluskid于2010年发表于"Machine Learning"板块,本文仅做编辑. 1.回顾 前面我们介绍了线性情况下的支持向量机,它通过寻找一个线性的超平面来达到对 ...

  5. svm c++实现_机器学习笔记——SVM向量机

    SVM支持向量机 此教程分为两个部分: 第一个部分旨在使用可视化的方式让同学们理解SVM的工作原理, SVM分割线, SVM的支持向量. 并且使用实例证明SVM的分割线只由支持向量唯一缺点, 与线性回 ...

  6. SVM为什么采用间隔最大化?SVM为什么将原始问题转换为其对偶问题?

    SVM为什么采用间隔最大化?SVM为什么将原始问题转换为其对偶问题? SVM为什么采用间隔最大化? SVM的基本思想就是求解能够正确划分训练数据集并且几何间隔最大的分离超平面,这里的间隔最大化又叫做硬 ...

  7. SVM学习(一):SVM概念

    SVM算法学习之旅,首先介绍一下SVM概念. 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出 ...

  8. ML之SVM:基于Js代码利用SVM算法的实现根据Kaggle数据集预测泰坦尼克号生存人员

    ML之SVM:基于Js代码利用SVM算法的实现根据Kaggle数据集预测泰坦尼克号生存人员 目录 实验数据 设计思路​ 实现代码(部分代码) 实验数据 设计思路 实现代码(部分代码) /**js代码实 ...

  9. ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)

    ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核) 目录 输出结果 设计思路 设计代码(部分代码) 输出结果 设计思路 设计代码(部分代码) var doTest = functi ...

最新文章

  1. 范数与距离的关系以及在机器学习中的应用
  2. 烂泥:为KVM虚拟机添加网卡
  3. 洛谷P1434-滑雪【线性化Dp】
  4. 在一个风景秀丽的小镇,一天早上,有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑
  5. 【HDU - 5012】Dice(模拟,bfs)
  6. 使用FontAwesome
  7. HTML5 header元素
  8. 【Elasticsearch】在Elasticsearch中查询Term Vectors词条向量信息
  9. mysql隔离性和线性隔离_MySQL--事务,隔离性和隔离级别
  10. Android学习笔记之Bitmap位图的缩放
  11. 入侵检测——masscan(扫描篇)
  12. RTC唤醒低功耗(standby)模式
  13. 电子元器件的识别与换算
  14. 2020年IT技术的发展趋势!
  15. 尊重孩子 梅兰芳“宠溺有道”
  16. 如何实现有效的项目进度控制?
  17. Pytorch简单一览表
  18. 羽毛球击球技术四大基本环节解码
  19. 软件工程心得之——产品经理与项目经理的区别
  20. 【YOLOv5 Head解耦】

热门文章

  1. Qt之进程间通信(IPC)
  2. Unity3d截图两种方式
  3. C#中的方法(上):
  4. P1005 采药(Tyvj)
  5. BestCoder Round #85
  6. poj-1845 Sumdiv nyoj - 928 小M的因子和
  7. Miniconda3及pip换源(conda清华源关闭)
  8. 数据结构(严蔚敏)之六——链式队列c语言实现
  9. jdbc调用mysql存储过程实现代码带有输入和输出
  10. .NET常用工具类(Utils.cs)