前言

好久没写,是因为觉得SVM实在是一个太庞大的东西,不知道该从何写起,也不知道能不能写好。但是最终还是觉得要写出来。

写在最前面,是想强调一点:
线性分类、逻辑回归当中,我们知道最终的分界面是一个平面,在二维当中说,也就是一条直线,但是有时候我们想得到一个非线性的分类边界怎么办呢?
这就引出了神经网络和SVM。

简要的提一下神经网络,在08年的时候,神经网络并没有那么火,09年深度学习概念火起来,极大的促进了神经网络。在08年的时候,吴恩达老师居然只是带过了一下,嘻嘻。
举个最简单的例子:


Machine Learning Series No.3-- Support Vector Machine
图1 神经网络

可以看到在图1左边,最终的表达式中,使用sigmoid函数时,分离平面是w1x!+w2x2+b=0,此时已然是线性关系,但是当我们多加一层隐藏层时,便不再是线性关系。


SVM

另一种有效构建非线性边界的方法便是大名鼎鼎的支持向量机(SVM)了。
在逻辑回归中,其实我们依然是当θTx>0时,预测为1,反之预测为0。自然而然的,我们就会想到,如果我们能使正样本预测的时候得到θTx>>0,负样本θTx<<0那就好了 ,所以也是自然而然的就得到了能够使得正负样本尽可能分开的思想。

SVM可以分为三种类型:线性可分、线性支持、非线性支持。
线性可分是最简单的形式,后两种都是在线性可分的基础上进行的扩展。我会分这三个部分来讲。
但是我最开始想讲的是一点数学知识,不然穿插着讲会比较乱。

一般化的拉格朗日乘数法

对于一个优化问题,我们常常伴随着一些约束。形式可以表达如下:

min f(w)st.gi(w)0,hi(w)=0

这比我们高中时候学过的拉格朗日乘数法多了小于等于的约束条件。我们按照高中时候的做法,构造函数:
L(w,α,β)=f(w)+iαigi(w)+jβjhj(w)αi0

同时,定义
θp(w)=maxα,βL(w,α,β)

接下来,证明原问题P等价于
minwθp(w)

首先讨论θp(w),当i,gi(w)>0,那么在最大化θp(w)时,因为αi0,则L(w,α,β)=,所以最大化θp(w),等价于约束了gi(w)0。同理j,hj(w)0,则可令βjhj(w)同号,使得L(w,α,β)=,所以最大化θp(w),等价于约束了hi(w)=0。因此原问题P等价于
minwθp(w)
,即
P=minwθp(w)=minwmaxα,βL(w,α,β)

对偶问题定义
定义
θD(w)=minwL(w,α,β),D=maxα,βθD(w)
D=maxα,βminwL(w,α,β)

DP的对偶问题,一般有DP
当满足KKT条件时,有D=P
而在KKT条件中,我们需要注意的是有一个条件是使得αigi(w)=0,一般情况下,两者不会同时为0。
求最大化或者最小化问题时,方法与高中学的拉格朗日乘数法一致。

有了上述数学知识作为背景,我们就可以愉快的推导SVM了。

之前我们也说过了,SVM的思想是找到一个超平面,该超平面能够将数据点分开,且不同类数据点间隔最大。见图:
Machine Learning Series No.3-- Support Vector Machine
在图中,我们可以认为红色是分类效果是最好的。
那既然有间隔,那我们就要去定义间隔怎么计算。
这就引出了函数间隔、几何间隔。
如感知器算法中一样,讨论二分类算法,令y{1,1},当wTx+b0时,预测为1,反之预测为0。在SVM中,我们希望类别为1的数据点的wTx+b远远大于0,类别为0的数据点wTx+b远远小于0,从而使得两类数据点分的越远越好。
记住wTx+b=0是分离超平面。
那么函数间隔定义γi^=yi(wTxi+b),当分类正确时,函数间隔会大于0,反之会小于0。且|wTx+b|越大,函数间隔也越大。可以将wTx+b的值看成是分类的确信度。
定义一个超平面关于一个训练样本集的函数间隔为:


γ^=min1,2,,Nγi^


很明显,当w,b都增大相同倍数时,wTx+b=0分离超平面是不变的,但是函数间隔却会放大为对应的倍数。所以函数间隔并不是一个有效的度量间隔的一种方式。
根据点到直线的距离公式,当平面为wTx+b=0时,某一个点xi到平面的距离应该等于:

γi=wTxi+b||w||


上述是一种理解式,在吴恩达老师的课堂上,他是这样讲的:

Machine Learning Series No.3-- Support Vector Machine

图中公式A,B分别代表对应点的坐标。
则将该距离定义为几何间隔(其实就是实际上我们高中学的点到直线的距离)。
则有

γi=yi(wTxi+b)||w||

同样,定义一个超平面关于一个训练样本集的几何间隔为:

γ=min1,2,,Nγi


同样,几何间隔为正时,表示分类正确。

明确一个目的:SVM集中于使得超平面对于分类间隔最大,等价于最小几何间隔最大(因为不会任何一个点的几何距离小于几何间隔)。
也就是说,SVM可以转化为以下优化问题:

maxγs.t.yi(wTxi+b)||w||γ, i=1,2,,N

因为γ^=||w||γ,代入上式,可得
maxγ^||w||s.t.yi(wTxi+b)γ^, i=1,2,,N

由于函数间隔正比于w,b,我们可以对w,b做约束,使得γ^=1,因此等价于:
max1||w||s.t.yi(wTxi+b)1, i=1,2,,N

转化为最小化问题:
min12||w||2s.t.yi(wTxi+b)1, i=1,2,,N

综上,接下来我会从三个方面来讲SVM:线性可分,线性支持,非线性支持。


线性可分SVM

何为线性可分,来张图:


Machine Learning Series No.3-- Support Vector Machine
线性可分情况

通俗的来说,也就是我们可以用一条直线将不同类别的数据点完全分开,称为线性可分。
有人可能就要问了,我们不是用SVM来导出非线性边界的吗?
当然,SVM是不仅可以导出线性边界,也可以导出非线性边界。
非线性边界由线性边界导出,所以我们当然要先讨论简单的啦。

看到上面的最小化优化问题,很明显,将约束条件的不等号变个方向,就满足我们一般化拉格朗日乘数法的形式,这是这里没有hi(x)的约束而已。

我们可以通过求解原问题的对偶问题进行求解:(有人可能要问为什么要用对偶形式求解,其实并不一定的,可参见回答
Machine Learning Series No.3-- Support Vector Machine
Machine Learning Series No.3-- Support Vector Machine

至此,我们会发现若求解出来,我们的所有点是可以使得函数间隔大于等于1的,这就是线性可分的含义。
但是,如果找不到一组解,使得所有点的函数间隔大于等于1呢?
这就引出了我们的线性支持和非线性支持,两者的区别仅在于数据是不是基本线性可分,若基本线性可分,我们还是可以沿用线性可分的情况,对其有所改进,否则就得用非线性支持方法啦。


线性支持SVM

假设我们的数据如下图所示:


Machine Learning Series No.3-- Support Vector Machine
线性支持

我们可能更想要得到实线的分离超平面,而不是认为其无法分类,在图中我们可知,线性分类器是无法将其正常分离的,也就是说,此时样本近似可分,但是却不是完全线性可分的。
抑或出现如下这种情况:

Machine Learning Series No.3-- Support Vector Machine
线性支持

在这个图形中,虚线是能够完全分离开样本的,但是我们不希望为了某些个别样本大幅度旋转我们的超平面,说不定某些点是异常值呢?
针对于这些情况,我们就可以使用线性支持向量机。
其优化问题变成:
min12||w||2+Ci=1Nξis.t.ξi0yi(wTxi+b)1ξi, i=1,2,,N

我们可以做如下理解:(仍然使得函数间隔为1)
yi=1,wTx+b1ξi,若yi=1,wTx+b1+ξi.
ξi[0,1]时,1ξi0,样本会落间隔边界内部,若ξi(1,)时,1ξi0,则允许样本错分。但是并不鼓励分类器进行这种做法,所以我们要使得所有ξi尽可能小,也就是尽可能的偏向于0,所以在目标式中加入了后面的惩罚项。
同样我们采用一般化的拉格朗日乘数法,进行对偶问题求解:
Machine Learning Series No.3-- Support Vector Machine
Machine Learning Series No.3-- Support Vector Machine
最终根据KKT条件可做判断如下:

Machine Learning Series No.3-- Support Vector Machine

上述摘自博客
至此,我们便求出了线性支持向量机的分离超平面。
可以从αigi(xi)=0βihi(xi)=0αi+βi=C,可得上述结论。


非线性支持SVM

终于来到了我们的重头戏,非线性边界啊!!
假设我们的数据如图所示:


Machine Learning Series No.3-- Support Vector Machine

这样我们用简单的线性分类器是不可能做到准确度较高的分类的,这个时候就需要一个f非线性边界了
在上述的求解过程笔记中,可以看到
最终我们的目标求解都可以化成:
max12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi

可以看到,而最终w=i=1Nαixiyi,求wTx+b时,依然只用到(xix)
综上,不论是在我们求解的过程当中,还是最终的求解式当中我们都只用到内积式子,所以我们就想,能不能找到一个一个函数K(x,y)=ϕ(x)ϕ(y),右边是一个内积,如果直接计算右边式子,不仅要计算ϕ,还要计算乘法,太复杂,如果可以直接表示成一个函数,那么我不就可以直接将值代入K(x,y)中就可以。
对应到SVM中,既然当前数据在当前平面内不可分,我可以选择一个函数,对各个数据点进行映射,映射到另一个空间当中,使得它对另一个空间当中线性可分,或者说接近线性可分,那样我们就可以沿用线性支持向量机对其进行计算了。也就是说,对于每一个x,我们进行映射,使得xϕ(x)
那么在之前的求解当中以及目标函数当中,涉及到的内积(xixj)ϕ(xi)ϕ(xj),若我们找到K(x,y)=ϕ(x)ϕ(y),便可以大大简化我们的计算,同时我们不必显式知道ϕ究竟是什么。

我们将K(x,y)成为核函数,原始求解目标可以转化为:

max12i=1Nj=1NαiαjyiyjK(xi,xj)+i=1Nαi

接下来,我们便可以在新的映射空间当中,对数据运行线性支持向量机算法。
判定一个函数是否为核函数,有定义可查,请读者自行查阅。

当我们的应设函数ϕ是一个非线性函数时,则含有核函数的SVM是非线性分类模型。

这里例举几个常用的核函数

  1. 多项式核函数:K(x,y)=(xy+c)p
  2. 高斯核函数:K(x,y)=e||xy||22σ2
  3. 字符串核函数,请自行查阅。

其实这里还有一个问题,在我们选取核函数的时候如何保证在另一个空间数据线性近似可分?
嘻嘻,好像都是试探性的,使用常用的核函数进行试探。


相关文章: