支持向量机(SVM)原理详解

SVM简介

  支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。html

1、支持向量与超平面

    在了解svm算法以前,咱们首先须要了解一下线性分类器这个概念。好比给定一系列的数据样本,每一个样本都有对应的一个标签。为了使得描述更加直观,咱们采用二维平面进行解释,高维空间原理也是同样。举个简单子:以下图所示是一个二维平面,平面上有两类不一样的数据,分别用圆圈和方块表示。咱们能够很简单地找到一条直线使得两类数据正好可以彻底分开。可是能将据点彻底划开直线不止一条,那么在如此众多的直线中咱们应该选择哪一条呢?从直观感受上看图中的几条直线,是否是要更好一些呢?是的,咱们就是但愿寻找到这样的直线,使得距离这条直线最近的点到这条直线的距离最短。这读起来有些拗口,咱们从以下右图直观来解释这一句话就是要求的两条外面的线之间的间隔最大。这是能够理解的,由于假如数据样本是随机出现的,那么这样分割以后数据点落入到其类别一侧的几率越高那么最终预测的准确率也会越高。在高维空间中这样的直线称之为超平面,由于当维数大于三的时候咱们已经没法想象出这个平面的具体样子。那些距离这个超平面最近的点就是所谓支持向量,实际上若是肯定了支持向量也就肯定了这个超平面,找到这些支持向量以后其余样本就不会起做用了。算法

                                                                    

2、SVM算法原理

  2.1 点到超平面的距离公式

      既然这样的直线是存在的,那么咱们怎样寻找出这样的直线呢?与二维空间相似,超平面的方程也能够写成一下形式:函数

                                                                                             (1)学习

  有了超平面的表达式以后以后,咱们就能够计算样本点到平面的距离了。假设为样本的中的一个点,其中表示为第个特征变量。那么该点到超平面的距离就能够用以下公式进行计算:优化

                                                                         (2) spa

  其中||W||为超平面的范数,常数b相似于直线方程中的截距。3d

  上面的公式能够利用解析几何或高中平面几何知识进行推导,这里不作进一步解释。htm

  2.2 最大间隔的优化模型

    如今咱们已经知道了如何去求数据点到超平面的距离,在超平面肯定的状况下,咱们就可以找出全部支持向量,而后计算出间隔margin。每个超平面都对应着一个margin,咱们的目标就是找出全部margin中最大的那个值对应的超平面。所以用数学语言描述就是肯定w、b使得margin最大。这是一个优化问题其目标函数能够写成:blog

                         (3)get

  其中表示数据点的标签,且其为-1或1。距离用计算,这是就能体会出-1和1的好处了。若是数据点在平面的正方向(即+1类)那么是一个正数,而当数据点在平面的负方向时(即-1类),依然是一个正数,这样就可以保证始终大于零了。注意到当w和b等比例放大时,d的结果是不会改变的。所以咱们能够令全部支持向量的u为1,而其余点的u大1这是能够办经过调节w和b求到的。所以上面的问题能够简化为:

                    (4)

  为了后面计算的方便,咱们将目标函数等价替换为:

                                                               (5)

  这是一个凸二次规划问题。能直接用现成的优化计算包求解,但咱们能够有更高效的办法。 

  2.3 学习的对偶算法

  为了求解线性可分支持向量机的最优化问题,将它做为原始最优化问题,应用拉格朗日对偶性,经过求解对偶问题获得原始问题的最优解,这就是线性可分支持向量的对偶算法。这样的优势:

  • 对偶问题每每更容易求解

  • 天然引入核函数,进而推广到非线性分类问题

  • 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。

  首先构建拉格朗日函数。为此,对每一个不等式约束引进拉格朗日乘子$a_{i}\geq 0,i=1,2,...,N$,定义拉格朗日函数:

$L(w,b,a)=\frac{1}{2}\left \| w \right \|^{2}-\sum_{i=1}^{N}a\left [ (w^{T}+b)-1 \right ]$  (6)

  其中$a_{i}> 0$ 

  根据拉格朗日函数对偶性,原始问题的对偶问题是极大极小问题:

$max_{a}min_{w,b}L(w,b,a)$ (7)

  因此,为了求解问题的解,须要先求求$L(w,b,a)$对$w,b$的极小,再求对$a$的极大。  

  (1) 求$min_{w,b}L(w,b,a)$

  将拉格朗日函数$L(w,b,a)$分别对$w,b$求偏导数令其等于0:

$\bigtriangledown _{w}L(w,b,a)=w-\sum_{i=1}^{N}a_{i}y_{i}x_{i}=0$  (8)

$\bigtriangledown _{b}L(w,b,a)=\sum_{i=1}^{N}a_{i}y_{i}=0$  (9)

  得:

$w=\sum_{i=1}^{N}a_{i}y_{i}x_{i}$(10)

$\sum_{i=1}^{N}a_{i}y_{i}=0$(11)

  将式(10)代入拉格朗日函数(6)并利用式(11),即得:

$L(w,b,a)=\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}a_{i}a_{j}y_{i}y_{j}(x_{i}x_{j})-\sum_{i=1}^{N}a_{i}\left [ y_{i} \right ((\sum_{j=1}^{N}a_{i}y_{j}x_{j})x_{i}+b)-1]+\sum_{i=1}^{N}a_{i}
=-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}a_{i}a_{j}y_{i}y_{j}(x_{i}\cdot x_{j})+\sum_{i=1}^{N}a_{i}$  (12)

  (2)$max_{w,b}L(w,b,a)$对$a$的极大

 $max_{a} \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}a_{i}a_{j}y_{i}y_{j}(x_{i}\cdot x_{j})+\sum_{i=1}^{N}a_{i}$   (13)

  subject to

$\sum_{i=1}^{N}a_{i}y_{i}=0$

 $a_{i}\geq 0,i=1,2,...,N$

  将上式的目标函数由极大转换成极小,就获得下面与之等价的对偶最优化问题:

$min_{a} \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}a_{i}a_{j}y_{i}y_{j}(x_{i}\cdot x_{j})+\sum_{i=1}^{N}a_{i}$  (14)

  subject to

$\sum_{i=1}^{N}a_{i}y_{i}=0$

$a_{i}\geq 0,i=1,2,...,N$

  从对偶问题解出的是原式中的拉格朗日乘子。注意到原式中有不等式约束,所以上述过程须要知足KKT条件,即要求:

$\left\{\begin{matrix}
a_{i}\geq 0\\ 
y_{i}f(x_{i})-1\geq 0\\ 
a_{i}(y_{i}f(x_{i})-1)=0
\end{matrix}\right.$  (15)

  因而,对于训练数据$(x_{i},y_{i})$,总有$a_{i}=0$或$y_{i}f(x_{i})=1$。若$a_{i}=0$,则该样本不会出如今上述求和公式中,也就不会对$f(x)$产生任何影响;若$a_{i}>0$则必有$y_{i}f(x_{i})=1$,所对应样本点位于最大间隔上,是一个支撑向量。这里显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需保留,最终模型仅与支持向量相关。

  那么如何求解式(14)不难发现,这是一个二次规划问题,可以使用通用的二次规划算法求解;然而,该问题的规模正比于训练样本数,这会在实际任务中形成很大的开销。为了避开这个障碍,人们经过利用问题自己的特性,提出了不少高校的算法,SMO(Sequential Minimal Optimization)是其中一个著名的表明。

  2.4 松弛变量

    由上一节的分析咱们知道实际中不少样本数据都不可以用一个超平面把数据彻底分开。若是数据集中存在噪点的话,那么在求超平的时候就会出现很大问题。从下图中能够看出其中一个蓝点误差太大,若是把它做为支持向量的话所求出来的margin就会比不算入它时要小得多。更糟糕的状况是若是这个蓝点落在了红点之间那么就找不出超平面了。

                                   

  所以引入一个松弛变量ξ来容许一些数据能够处于分隔面错误的一侧。这时新的约束条件变为:

  (16)

  式中ξi的含义为容许第i个数据点容许偏离的间隔。若是让ξ任意大的话,那么任意的超平面都是符合条件的了。因此在原有目标的基础之上,咱们也尽量的让ξ的总量也尽量地小。因此新的目标函数变为:

(17)

(18)

  其中的C是用于控制“最大化间隔”和“保证大部分的点的函数间隔都小于1”这两个目标的权重。将上述模型完整的写下来就是:

(19)

  新的拉格朗日函数变为:

(20)

  接下来将拉格朗日函数转化为其对偶函数,首先对分别求ξ的偏导,并令其为0,结果以下:

(21)

  代入原式化简以后获得和原来同样的目标函数:

(22)

  可是因为咱们获得,所以有因此对偶问题写成:

(23)

  通过添加松弛变量的方法,咱们如今可以解决数据更加混乱的问题。经过修改参数C,咱们能够获得不一样的结果而C的大小到底取多少比较合适,须要根据实际问题进行调节。

  2.5核函数

    以上讨论的都是在线性可分状况进行讨论的,可是实际问题中给出的数据并非都是线性可分的,好比有些数据多是以下图样子。

     

  那么这种非线性可分的数据是否就不能用svm算法来求解呢?答案是否认的。事实上,对于低维平面内不可分的数据,放在一个高维空间中去就有可能变得可分。以二维平面的数据为例,咱们能够经过找到一个映射将二维平面的点放到三维平面之中。理论上任意的数据样本都可以找到一个合适的映射使得这些在低维空间不能划分的样本到高维空间中以后可以线性可分。咱们再来看一下以前的目标函数:

(24)

  定义一个映射使得将全部映射到更高维空间以后等价于求解上述问题的对偶问题:

(25)

  这样对于线性不可分的问题就解决了,如今只须要找出一个合适的映射便可。当特征变量很是多的时候在,高维空间中计算内积的运算量是很是庞大的。考虑到咱们的目的并非为找到这样一个映射而是为了计算其在高维空间的内积,所以若是咱们可以找到计算高维空间下内积的公式,那么就可以避免这样庞大的计算量,咱们的问题也就解决了。实际上这就是咱们要找的核函数,即两个向量在隐式映射后的空间中的内积。下面的一个简单例子能够帮助咱们更好地理解核函数。

  经过以上例子,咱们能够很明显地看到核函数是怎样运做的。上述问题的对偶问题能够写成以下形式:

(26)

  那么怎样的函数才能够做为核函数呢?下面的一个定理能够帮助咱们判断。

  Mercer定理:任何半正定的函数均可以做为核函数。其中所谓半正定函数是指拥有训练集数据集合,咱们定义一个矩阵的元素,这个矩阵是的矩阵,若是这个矩阵是半正定的,那么就称为半正定函数。

  值得注意的是,上述定理中所给出的条件是充分条件而非充要条件。由于有些非正定函数也能够做为核函数。

  下面是一些经常使用的核函数:

核函数名称

核函数表达式

核函数名称

核函数表达式

线性核

指数核

多项式核

拉普拉斯核

高斯核

Sigmoid核

    如今咱们已经了解了一些支持向量机的理论基础,咱们经过对偶问题的的转化将最开始求的问题转化为求的对偶问题。只要找到全部的(即找出全部支持向量),咱们就可以肯定。而后就能够经过计算数据点到这个超平面的距离从而判断出该数据点的类别。

3、SMO 算法

  SMO算法是支持向量机学习的一种快速算法,其特色是不断地将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,知道全部变量知足KKT条件为止。这样经过启发式的方法获得原二次规划问题的最优解。由于子问题有解析解,因此每次计算子问题都很快,虽然计算子问题次数不少,但在整体上仍是高效的。 

 

参考

《统计学习方法(第2版)》 李航 著

https://zhuanlan.zhihu.com/p/31886934

http://www.javashuo.com/article/p-amywfhfu-nz.html

https://www.zybuluo.com/77qingliu/note/1137445

http://www.360doc.com/content/18/0424/21/47919125_748467297.shtml

相关文章
相关标签/搜索