25 Mar 2017

支持向量机(SVM)

目录

欢迎在文章下方评论,建议用电脑看

支持向量机(SVM)

今天讲下支持向量机!这个模型很强大,但理解起来可能有点麻烦,它的理论支持已经比较完善了(相对于深度神经网络而言),涉及的数学比较多,我理解的也相当的有限,希望能够讲好点,下面开始吧!

基本概念

  • 支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
  • 按照惯例,先上一个最通俗的例子来直观的理解SVM,我从知乎上找到了一篇回答,他很形象的描述了SVM,传送门:通俗理解svm
  • 最大间隔分类器(maximum margin classifier,可以被看做是支持向量机的前身)实际上就选择特定的w,b使几何间隔最大化。
  • 它通常被认为是最好的现成监督学习算法之一(很多人认为它是最好的)

和Logistic回归的区别

  • 就是在Z=w^Tx+θ0=>Z=w^Tx+b,和b这个截距。是的y的值在-1和1之间
  • 为了更加简洁的介绍支持向量机,我们需要先引入一种新的标记。考虑使用线性分类器解决“特征为x目标为y”的二元分类问题。这次,我们使用y∈{−1,1}来标记两个分类(而不是之前的y∈{0,1}),再使用参数向量w,b代替之前的参数向量θ和θ0(就是截距),于是我们现在将分类器写为:hw,b(x)=g(wTx+b),w是参数向量,b是一个实数

问:为什么直接用正负一而不是0,1呢?

答:因为在表示几何间隔和函数间隔的时候,+1表示的是1类的间隔,而-1表示的是另一类的间隔,可以通过统一的公式来表示点到超平面的间隔

间隔

在讲函数间隔之前,我们先来看下一个直观的理解:

  • 如果求关于点A的预测,我们会非常确定其值为y=1。相反,点C距离判别边界很近,虽然它在判别边界y=1一侧,但是如果判别边界稍有变动,它就有可能被放在y=0一侧。因此,我们对点A预测的“信心”强于点C。而点B则在两者之间,通常来说,如果点距离判别边界越远,模型做出预测的“信心”就越强。也就是说,如果对于给定训练集,可以找到一条能够准确并可信(即样本距离边界很远)的预测所有训练样本的判别边界,则称这个拟合是良好的。

  • 故现在我们从间隔的角度,或者说是信心,因为这反映出该拟合对分类结果的“信心”很足。所以,“信心”是一个很好的指标,后面我们将使用函数间隔形式化这个指标。考虑其空间意义,就是两类被模型描述相差越远(注意不是实际两类差别,因为两类差别是客观不变的,这里的差别指两类离这分界模型距离),那么模型就是最好的。在svm,用到的就是间隔(或者说是信心)。

函数间隔

  • 先给出定义,给定一个样本,它的函数间隔是:因此可知,如果要得到一个值尽可能大的函数间隔,当y为-1时,这时要求要尽可能的小于零,相反,如果y为1时,这时要求要尽可能的大于零。同时,在这里,我们也可以理解下面一个问题:

  • 我们发现,最终最大间隔分类用的不是函数间隔,而是几何间隔,为什么呢?因为有一个性质导致其函数间隔不能有效的反映预测的可信度,就是在函数间隔成倍增加的时候,分类超平面并没有改变,也就不能用函数间隔的大小来衡量超平面是否合理。但也许,你也有如下问题:

问:为什么要成倍增加来看函数间隔?

答:因为这里是证明函数间隔不能用来作为依据,那么只要证明存在一种情况使得函数间隔变化结果却不变就可以了(注意用简单的二维的例子)。几何间隔就是点到直线的距离,高维就是上面的几何间隔,而函数间隔就是未标准化的几何间隔。

几何间隔

回到一开始讲间隔的时候,给出几何间隔的定义公式,定义A点的几何间隔为:

函数间隔和几何间隔的关系

  • 函数间隔/   w   =几何间隔,函数间隔会随着w和b的缩放而缩放,但是对于算法的参数选取没有意义。几何间隔不会随着w和b的缩放而缩放。
  • 高维就是上面的几何间隔,而函数间隔就是未标准化的几何间隔。
**问:   w   存在的意义是什么?**

将(w,b)变为(2w,2b)相当于给函数间隔乘了系数2,于是我们发现,如果通过改变w,b的取值,我们可以让函数间隔变得很大,然而分类超平面并没有改变,所以单纯的通过这种方式改变函数间隔的大小没有什么实质意义,应该引入一种标准化条件,比如令∥w∥=1(此时是垂直于超平面的单位向量)。

我的理解,纯碎w,b改变,函数间隔改变了,但当纯碎w,b改变时,对于这里的g(z)来说,效果没有变化,故纯粹改变w,b时,不能用来作为确定更好参数的前提。函数间隔倍数增加无效,几何间隔加减变化有效,指倍数不能对正负改变但加减可以。

看了几遍之后,终于理解,**这里的   w   要联想低维的点到直线的距离就好**,没有那么复杂,就是二维点到直线距离的除数而已

为什么在求解最优化的时候,函数间隔可以设为1?

答:按比例缩放参数(w,b)对假设结果没有任何影响,我们现在可以利用这一点。我们现在来引入限制条件:对于给定的训练集,以(w,b)为参数的函数间隔必须为1,在这里,数值是什么关系的,这只是一种约束,通过数值等比例缩放得到。

也就是说函数间隔和最优解无关,因为函数间隔可以任意变化,但问题还是原来的问题

有关凸优化

因为下面会用到比较多凸优化,所以在这里先说下它的简单定义。

  • 简单的说,优化问题中,目标函数为凸函数,约束变量取值于一个凸集中的优化问题称为凸优化,举个简单例子,设S为凸集,f(x)为S上凸函数,则问题min f(x) s.t. x属于S。为一个凸优化。

  • 设S为n维空间中的一个点集,X1、X2为S中的任两点。若对于任给的t,0<=t<=1,点X=tX1+(1-t)X2也属于S,则称S为n维空间中的一个凸集。组合tX1+(1-t)X2称为X1和X2的凸组合。简单的说,若两点在一个点集中,那么连接这两点的线段上所有点也在这个点集中,这样的点集就称为凸集。

svm分类

SVM包括:线性可分支持向量机、线性支持向量机、非线性支持向量机。其区分如下。

线性可分支持向量机 :要求硬间隔最大化,也叫硬间隔支持向量机。

线性支持向量机 :要求软间隔最大化,也叫软间隔支持向量机。

非线性支持向量机 :包含核函数的SVM。

注:“线性支持向量机”中线性指的是最终的分割超平面是线性的,而不是指数据是线性可分的,于是这三种SVM也可以这样描述:

线性可分支持向量机 :数据线性可分,分割面为线性。

线性支持向量机 :数据线性不可分,分割面为线性。

非线性支持向量机 :数据无所谓,分割面不为线性。

下面,我们就按照这样的顺序来讲解svm的有关内容。

线性可分支持向量机

也就是这样的情形,下面我们通过间隔最大化得到SVM的分隔超平面,然后进行分类

header1

header1

header1

header1

header1

线性支持向量机

也就是这样的情形,下面我们对目标函数着损失函数进行稍加的修改。

header1

header1

非线性支持向量机

核方法

核方法的主要思想是基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的”

header1

Mercer 定理:

任何半正定的函数都可以作为核函数。所谓半正定的函数f(xi,xj),是指拥有训练数据集合(x1,x2,…xn),我们定义一个矩阵的元素aij = f(xi,xj),这个矩阵式n*n的,如果这个矩阵是半正定的,那么f(xi,xj)就称为半正定的函数。(这个mercer定理不是核函数必要条件,只是一个充分条件,即还有不满足mercer定理的函数也可以是核函数。)–这个有待确定。常见的核函数有高斯核,多项式核等等,在这些常见核的基础上,通过核函数的性质(如对称性等)可以进一步构造出新的核函数。

低维转高维要解决的问题

一是由于是在高维度空间中计算,导致curse of dimension问题;二是非常的麻烦,每一个点都必须先转换到高维度空间,然后求取分割平面的参数等等,还有就是转化成高维通常是用一个函数映射,而映射之后的求解会变得艰难,不过在svm中内积的形式就给我们方便,也就是可以用内积的方式,用简单的计算,得到和高纬一样结果

核方法和分类(或者回归)的问题

“为什么我们要关心向量的内积?”,一般地,我们可以把分类(或者回归)的问题分为两类:参数学习的形式和基于实例的学习形式。参数学习的形式就是通过一堆训练数据,把相应模型的参数给学习出来,然后训练数据就没有用了,对于新的数据,用学习出来的参数即可以得到相应的结论;而基于实例的学习(又叫基于内存的学习)则是在预测的时候也会使用训练数据,如KNN算法。而基于实例的学习一般就需要判定两个点之间的相似程度,一般就通过向量的内积来表达。从这里可以看出,核方法不是万能的,它一般只针对基于实例的学习。

核方法的直观理解

能够直观(这种直观印象并非严格成立)的看出,如果向量ϕ(x)与ϕ(z)方向靠的比较近,那么根据K(x,z)=ϕ(x)Tϕ(z)可知这个值会比较大;反正,如果两个向量近乎正交(方向离的比较远),则K(x,z)=ϕ(x)Tϕ(z)将会很小。如此,我们就可以用K(x,z)度量ϕ(x)与ϕ(z)的相似度,或者x与z的相似度。

header1

How to select SVM kernels?

  • the linear kernel works fine if your dataset if linearly separable
  • the rule of thumb is: use linear SVMs (or logistic regression) for linear problems, and nonlinear kernels such as the Radial Basis Function kernel for non-linear problems.
  • it looks like both linear and RBF kernel SVM would work equally well on this dataset(linearly separable).but ,we should choose linear kernels.for the reason that Not only is it more expensive to train a RBF kernel SVM, but you also have to keep the kernel matrix around, and the projection into this “infinite” higher dimensional space were the data becomes linearly separable is more expensive as well during prediction
  • the polynomial kernel. In practice, it is less useful for efficiency (computational as well as predictive) performance reasons.

最后,给出在非线性的情况下的svm解法!

header1

坐标法求最优解

考虑解决无约束最优问题: svm 现在,我们只将W看做关于αi的函数,与支持向量机无关。到目前为止我们已经了解了两种优化算法:梯度下降/上升法,牛顿法,这里我们再来介绍一种新的优化算法——坐标下降/上升法(coordinate descent/ascent algorithm):

在算法里面一层循环中,我们会固定除αiαi以外的参数,然后重新优化这个关于αi的函数W。对上面的这个例子,里面的循环会按照α1,α2,⋯,αm,α1,α2,⋯的顺序进行优化。(对一些复杂的问题可能会使用别的顺序,比如,我们可以看哪个参数会带来W(α)最大幅度的增长,就选择哪个参数作为下一个优化的对象。)

而当函数W恰好符合里面一层循环可以高效运行的状态时(事实上有很多优化问题很容易固定其他参数只对一个参数求最优值,在这种情况下本算法的内层循环将会执行的非常快。而支持向量机通常也属于这种情况),坐标下降/上升法确实是一个效率很高的算法,如图所示:

很多小伙伴看到这里其实还是有点疑惑的,感觉这样的方法一定能够求得最优解吗?我当时也有这样的疑惑,没关系,那再来看下下面的数学图像讲解:

二元偏导数的几何意义

比如一个椭球面,它有无数个点,有其中一点(a,b,c) 函数对x的偏导数 就是 阴影椭圆形的线框(平行于x0z面),再建立坐标x‘0z’,仅考虑该坐标的话 有函数z=f(x) f’(x)是z=f(x)的导数(也是斜率)同时也等于球面函数在(a,b,c)点对于x的偏导

问:所以到底怎么理解坐标下降/上升法? 答:我们可以看上图,一开始我们确定(a,b,c然后对x求偏导数,这个时候y是固定的,然后再对y求偏导数,这个时候x是固定的),稍微想象一下就会发现最后我们是会到达局部最大/小点的!

坐标上升,这个博客唯一可能会误导的是,首先要确定初始的点,而博客中没有

梯度下降和坐标下降的区别

  • 梯度下降法又称为最速下降法,他也是下降法,不过和坐标下降法的主要区别就是多了一个下降方向的选取,在坐标下降中下降方向是沿着每一维的坐标轴方向进行的,也就是方向是类似于(0,0,1,0,0)、(0,0,0,1,0)(假设是5维)这种形式的,而梯度下降法中,下降方向变换为函数在当前点的梯度方向,当维度很高时,梯度下降的优势就要比坐标下降明显很多。

序列最小优化算法(SMO: sequential minimal optimization)

讲完上面一般的坐标法求解之后,下面我们来讲解在SVM的坐标法求解!

  • SMO(sequential minimal optimization)算法起源于SVM, John Platt起初了一个高效解决对偶问题的方法.

header1

然后,它的具体算法步骤如下:

header1

最后推荐博文时间:SVM较好的博文


Tags:
Stats:
comments


Share: