欢迎在文章下方评论,建议用电脑看
今天讲下支持向量机!这个模型很强大,但理解起来可能有点麻烦,它的理论支持已经比较完善了(相对于深度神经网络而言),涉及的数学比较多,我理解的也相当的有限,希望能够讲好点,下面开始吧!
问:为什么直接用正负一而不是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的分隔超平面,然后进行分类
也就是这样的情形,下面我们对目标函数着损失函数进行稍加的修改。
核方法的主要思想是基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的”
任何半正定的函数都可以作为核函数。所谓半正定的函数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的相似度。
最后,给出在非线性的情况下的svm解法!
考虑解决无约束最优问题: 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是固定的),稍微想象一下就会发现最后我们是会到达局部最大/小点的!
坐标上升,这个博客唯一可能会误导的是,首先要确定初始的点,而博客中没有
讲完上面一般的坐标法求解之后,下面我们来讲解在SVM的坐标法求解!
然后,它的具体算法步骤如下:
最后推荐博文时间:SVM较好的博文