什么是SVM?

支持向量机( Support Vector Machine),第一次看到这个算法名字的时候,内心只有一个感觉,好变态,导致我刚开始一直都不敢去学习这个算法,总觉得自己学不会,可是真鼓起勇气接触一段时间后,发现 一个普通的SVM就是一条直线罢了,用来完美划分线性可分的两类。但这又不是一条普通的直线,这是无数条可以分类的直线当中最完美的,它的完美就在于它恰好在两个类的中间,距离两个类的点都一样远,我们称这条线为决策边界,而所谓的支持向量Support vector就是这些离分界线最近的『点』…

支持向量机学习模型包括:
1、线性可分支持向量机
这是一类最简单的支持向量机模型,它要求训练数据集是线性可分的,如上图中给出的训练数据集就是线性可分的。
2、线性支持向量机
这类模型不要求训练数据集线性可分,但还是通过第1类的方法来做。
3、非线性支持向量机
这是最复杂的支持向量机,它的训练数据集本身是非线性的,但是通过线性变换,我们可以将这个数据集投射到另外一个特征空间,在新的特征空间中训练数据集变为线性可分。而这其中使用了一个非常重要的概念,叫做核技巧(Kernel Trick)。

1、线性可分支持向量机

要解决的问题:什么样的决策边界才是最好的呢?
接下来我们将进行推导:
1.1 决策边界:选出来离雷区最远的(雷区就是边界上的点,要Large Margin,不要Small Margin)
支持向量机算法原理(一)
1.2 距离计算
支持向量机算法原理(一)
看上图,假设决策平面为w.x+b=0.,x’,x”都是决策平面上的点,那么w为该决策平面的一个法向量,那么点x到决策平面的距离为:
distance = w’ (x’ - x) / || w ||(一个向量在另一个向量上的投影)
又因为:
w’x’ + b = 0
则 distance = | (w’x +b) | / ||w||
数据标签定义:
数据集:(X1,Y1)(X2,Y2)… (Xn,Yn)
Y为样本的类别: 当X为正例时候 Y = +1 当X为负例时候 Y = -1
决策方程: (其中 是对数据做了变换,后面继续说)
支持向量机算法原理(一)
优化的目标:
通俗解释:找到一个条线(w和b),使得离该线最近的点(雷区)能够最远
将点到直线的距离化简得:支持向量机算法原理(一)
由于 所以将绝对值展开原始依旧成立)
1.3 目标函数:
放缩变换:对于决策方程(w,b)可以通过放缩使得其结果值|Y|>= 1
支持向量机算法原理(一)
(之前我们认为恒大于0,现在严格了些)
优化目标如下:
支持向量机算法原理(一)
由于
支持向量机算法原理(一)
只需要考虑支持向量机算法原理(一)
(目标函数搞定!)
当前目标:
支持向量机算法原理(一)
约束条件为:
支持向量机算法原理(一)
常规套路:将求解极大值问题转换成极小值问题
支持向量机算法原理(一)
下面将用拉格朗日乘子法来求解:
支持向量机算法原理(一)
由于
支持向量机算法原理(一)
且α大于0,则上述式子的第二部分
支持向量机算法原理(一)
一定是大于0的,则
支持向量机算法原理(一)的值一定小于或等于支持向量机算法原理(一),所以我们应该先求得α使得支持向量机算法原理(一)最大,然后求支持向量机算法原理(一)最小值。
1.4 目标函数求解
分别对w和b求偏导,分别得到两个条件(由于对偶性质)
支持向量机算法原理(一)
对w求偏导:
支持向量机算法原理(一)
对b求偏导:
支持向量机算法原理(一)
带入原始式子:
支持向量机算法原理(一)
其中:
支持向量机算法原理(一)
支持向量机算法原理(一)
完成了第一步求解,下面继续对α求极大值:
支持向量机算法原理(一)
极大值转换成求极小值:
支持向量机算法原理(一)
条件:支持向量机算法原理(一)

注意!!!:支持向量就是真正发挥作用的数据点,也即ɑ值不为0的点

至此,可求解,看着数学公式挺多,其实解起来不难

2. 线性支持向量机

soft-margin(软间隔): 说的是这样一种情况,有时候数据中有一些噪音点,如果考虑它们咱们的线就不太好了,这样会使得这条决策边界变得非常窄,在训练集上的表现效果很好,在测试集上的表现很差,这个时候,为了提高分类器的性能,这些噪音点我们可以允许它距离分类边界的距离小于我们所规定的距离,用少许的犯错来获取更好的分类性能,如下图
支持向量机算法原理(一)
也就是说,之前的方法要求要把两类点完全分得开,这个要求有点过于严格了,我们来放松一点!
为了解决该问题,引入松弛因子:
支持向量机算法原理(一)
那么新的目标函数就变成了:
支持向量机算法原理(一)
其中C是我们自己设置的:
当C趋近于很大时:意味着分类严格不能有错误,间隔小;
当C趋近于很小时:意味着可以有更大的错误容忍,间隔大;
拉格朗日乘子法:
支持向量机算法原理(一)
支持向量机算法原理(一)分别求偏导:
支持向量机算法原理(一)
将上述三式带入原式中:
支持向量机算法原理(一)
对上式求关于α的极大值, 得到:
支持向量机算法原理(一)
约束条件为:
支持向量机算法原理(一)
整理,得到对偶问题:
支持向量机算法原理(一)
求得最优解

3. 非线性支持向量机

前面谈的都是线性可分或者线性近似可分的情况,如果,是线性不可分的情况呢?可以使用核函数,将原始低维输入空间映射到新的高维空间,从而使得原本线性不可分的样本可能在核空间可分。
支持向量机算法原理(一)
如上图,如果我们可以把我们的原始样本点通过一个变换,变换到另一个特征空间,在这个特征空间上是线性可分的,那么上面的SVM就可以轻易工作了。也就是说,对于不可分的数据,现在我们要做两个工作:
1)首先使用一个非线性映射Φ(x)将全部原始数据x变换到另一个特征空间,在这个空间中,样本变得线性可分了;
2)然后在特征空间中使用SVM进行学习分类。
我们再回头看看上面SVM的优化问题:
支持向量机算法原理(一)
可以看到,对样本x的利用,只是计算第i和第j两个样本的内积就可以了。我们把这里的计算两个向量在映射过后的空间中的内积的函数叫做核函数 (Kernel Function),也就是两个样本xi和xj对应的高维空间的内积Φ(xi)T Φ(xj)通过一个核函数K(xi, xj)计算得到。
对于分类决策函数,
支持向量机算法原理(一)
也就是新来的样本x和我们的所有训练样本计算核函数即可,
需要注意的是,因为大部分样本的拉格朗日因子αi都是0,所以其实我们只需要计算少量的训练样本和新来的样本的核函数,然后求和取符号即可完成对新来样本x的分类了。
常用核函数:
高斯核 (径向基函数) :支持向量机算法原理(一)
这个核就可以将原始空间映射为无穷维空间。

相关文章: