SVM实战的理论基础

本章摘要:

这一节主要是理解支持向量机一些理论知识。由于理论性质较强,我们需要借助其他的一些文章知识帮助我们理解SVM。大部分理论是摘录一些经典文章来总结,大家都可以进行参考。


基于最大间隔分割数据

优点:泛化错误率低,计算开销不大

缺点:参数调节和核函数的选择敏感,原始分类器不修改只能处理二类分类器

适用的数据类型:数值型和标称型数据。

分隔超平面

我们先看以下4个图:


    能够将上面的数据集分隔开来的直线就是分隔超平面。当数据点在二维平面的时候,分隔超平面就是一个平面。显而易见,更高维的情况同样适用,比如数据集是1024那么就需要一个1023维对象对数据分隔。这个对象被称为超平面,也就是分类的决策边界。

    我们希望采用这种方式来构建分类器,如果数据点离决策边界越远,那么结果就约可信。但是我们的目标并不是简单寻找距离最佳直线或者平面,而是可以观测距离分隔面最近的点,使得他们距离尽可能大。

支持向量:离分隔超平面最近的那些点


最优超平面


这是一个男女根据体重和身高来划分的散点图,我们的这条分隔超平面是否是最优的呢? 要选择这样一个超平面– 尽可能的远离所有类别的数据点。这种直观的感觉是正确的。如果加入新的测试数据仍然能保持健壮性。那么就会引入Margin

Margin就是分隔超平面的间隔

给定一个特定的超平面,我们可以计算出这个超平面与和它最接近的数据点之间的距离。间隔(Margin)就是二倍的这个距离。

一般来说,间隔(Margin)中间是无点区域。这意味着里面不会有任何点。(注:在数据有噪声的情况下,可能达不到这么理想的状况,所以我们后面会引入软间隔分类器)同时我们还能得到以下结论。如果一个超平面有非常接近的数据点,那么间隔会小,如果超平面离数据点越远那么间隔越大。最优分隔超平面就有最优的间隔。SVM是利用间隔最大化求得最优分离超平面

这一节下面内容摘录:http://blog.csdn.net/han_xiaoyang/article/details/52683653

我们都知道一条直线的数学方程是: y=ax+b ,而超平面会被定义成类似的形式:

wTx=0

只要找到一个分隔超平面,就能计算平行于这个超平面的间隔。得到间隔之后,就能通过它的中点找到另外一个超平面(比如上图的中间蓝色直线)。所以

  • 寻找最大间隔,就是寻找最优超平面
如何进行呢?

  • 读取你的数据集。
  • 找到两个平行超平面,可以划分数据并且两平面之间没有数据点。
  • 最大化上述两个超平面间隔
任何超平面都可以写成 满足 wxb=0 的点 x  的集合

给出一个超平面 H0 划分数据集并且满足: 

wxb=0

我们选择其他两个划分数据集的超平面的 H1 H2 ,有如下的方程: 

wxb=δ
wxb=δ

设定 δ δ 的原因是为了让 H0 H1 H2 等距。

不过再仔细想想,你会发现 w b 是可以缩放的,这里的变量 δ 其实是没有必要的,为了简化(不引入那么多未知数),我们通过一定的缩放,让 δ=1 来简化问题。OK,所以我们有了一下形式的2个超平面:

wxb=1wxb=1

还有一个事情咱们得确认一下:它们之间没有任何的数据点。

我们只选择那些符合以下两个约束的超平面: 
对于每一个向量 xi  
满足

wxib1for xi1
或者
wxib1for xi1

咱们来试着理解一下上面的约束,在下面的图中,所有的红点都是 1 类,所有的蓝点都是 1 类。

可以通过这个约束条件使得 选择两个 中间没有数据点 的超平面。当然,这里举得例子是二维平面的,而实际上对于更高维的空间也是成立的。

for xi1wxib1

两边同乘 yi (在该约束中始终为-1) 
yi(wxib)yi(1)

这意味着方程式 (5) 可以写做: 

yi(wxib)1for xi1

在方程 (4) 中,因为y_i =1,它不改变不等号方向。 

yi(wxib)1for xi1

将方程式 (6) (7) 写在一起 : 
yi(wxib)1for all1in

OK,我们得到了一个很简洁的约束条件(方程8),它和方程4,5在数学上是等价的,也能保证两超平面间没有数据点。

下面就是如何保证间隔最大化

  • H0 是满足约束 wxb=1 的超平面
  • H1 是满足约束 wxb=1 的超平面
  • x0  是  H0 上的一点

对了,从 x0 到超平面 H1 的垂直距离m就是我们所说的间隔。 x0 在超平面 H0 上,所以m是超平面 H0 H1 间的距离。


然后通过下面这个图


我们其实是想要找到这样一个向量:

  • 长度为m
  • 方向垂直于平面 H1
我们发行已经有一个垂直 H1 的向量,是 w W. 我们定义 u=ww w 的单位向量,即 u=1 ,且它和 w 有相同的方向,垂直于平面 H1

如果我们用 u 乘以 m ,得到向量 k=mu ,让k满足:

  • k=m
  • k 垂直于 H1 ,因为它与 u 具有相同方向
就是通过这样一个方式把m转换成一个可以和向量 x0 相加的向量 k . 如果我们在向量 x0 上加上 k ,可以得到向量 z0=x0+k (终点在超平面 H1 上),如下图所示


下面是推导的精华所在:

z0 H1 上意味着 

wz0+b=1(10)

我们可以用 x0+k 代替 z0

w(x0+k)+b=1(11)

用方程式 (9) 替代 k  

w(x0+mww)+b=1(12)

将式子展开可得 

wx0+mwww+b=1(13)

向量与自己的内积是它的模的平方,所以: 

wx0+mw2w+b=1wx0+mw+b=1wx0+b=1mw

因为 x0 H0 上,所以 wx0+b=1 ,带入: 

1=1mwmw=2m=2w

我们找到了一种计算 m 的方法

最大化间隔也就是最小化 w 的模。

我们的目标是最大化间隔。在所有满足约束条件超平面中,我们选择有最小 w 的超平面,因为这意味着有最大间隔。

有了以下的优化问题: 

yi(wxib)1i=1,,nww,b

解决这个问题有点像求解方程。一旦解出来答案,我们会找到满足约束条件,也使得 w 最小的值对 (w,b) 。对,你可以把它叫做最优超平面的方程!


转化成优化问题

       这是个凸二次规划问题。什么叫凸?凸集是指有这么一个点的集合,其中任取两个点连一条直线,这条线上的点仍然在这个集合内部,因此说“凸”是很形象的。例如下图,对于凸函数(在数学表示上,满足约束条件是仿射函数,也就是线性的Ax+b的形式)来说,局部最优就是全局最优,但对非凸函数来说就不是了。二次表示目标函数是自变量的二次函数。


虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过 Lagrange Duality 变换到对偶变量 (dual variable) 的优化问题之后,可以找到一种更加有效的方法来进行求解,而且通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。也就说,除了用解决QP问题的常规方法之外,还可以应用拉格朗日对偶性,通过求解对偶问题得到最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一是对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。


SVM对偶问题转换

虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过 Lagrange Duality 变换到对偶变量 (dual variable) 的优化问题之后,可以找到一种更加有效的方法来进行求解,而且通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。也就说,除了用解决QP问题的常规方法之外,还可以应用拉格朗日对偶性,通过求解对偶问题得到最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一是对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。


对于SVM,前面提到,其primal problem是以下形式:

       同样的方法引入拉格朗日乘子,我们就可以得到以下拉格朗日函数:

对L(w, b, α)分别求w和b的极值。也就是L(w, b,α)对w和b的梯度为0:∂L/∂w=0和∂L/∂b=0,还需要满足α>=0。求解这里导数为0的式子可以得到:

再代入拉格朗日函数后,就变成:

        这个就是dual problem(如果我们知道α,我们就知道了w。反过来,如果我们知道w,也可以知道α)。这时候我们就变成了求对α的极大,即是关于对偶变量α的优化问题(没有了变量w,b,只有α)。当求解得到最优的α*后,就可以同样代入到上面的公式,导出w*和b*了,最终得出分离超平面和分类决策函数。

也就是训练好了SVM。那来一个新的样本x后,就可以这样分类了:

以上内容摘录:http://blog.csdn.net/zouxy09/article/details/17291543

KKT条件

KKT条件是拉格朗日乘子法的泛化,如果我们把等式约束和不等式约束一并纳入进来则表现为:

L(x,λ,μ)=f(x)+ni=1λihi(x)+qk=1μkgk(x)λi0hi(x)=0μk0gk(x)0 L(x,λ,μ)=f(x)+∑i=1nλihi(x)+∑k=1qμkgk(x)λi≠0hi(x)=0μk≥0gk(x)≤0}=> minxmaxμL(x,λ,μ)=maxμminxL(x,λ,μ)=minxf(x)=f(x)μkgk(x)=0L(x,λ,μ)x|x=x=0 {minxmaxμL(x,λ,μ)=maxμminxL(x,λ,μ)=minxf(x)=f(x∗)μkgk(x∗)=0∂L(x,λ,μ)∂x|x=x∗=0

注: x,λ,μ x,λ,μ都是向量。

L(x,λ,μ)x|x=x=0 ∂L(x,λ,μ)∂x|x=x∗=0表明 f(x) f(x)在极值点 x x∗处的梯度是各个 hi(x) hi(x∗) gk(x) gk(x∗)梯度的线性组合。


其实很多的 αi 都是0,也就是说 w 只是一些少量样本的线性加权值。这种“稀疏”的表示实际上看成是KNN的数据压缩的版本。也就是说,以后新来的要分类的样本首先根据 w 和b做一次线性运算,然后看求的结果是大于0还是小于0来判断正例还是负例。现在有了 αi ,我们不需要求出 w ,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的 αi 不为0,其他情况 αi 都是0。因此,我们只需求新来的样本和支持向量的内积,然后运算即可


松弛向量与软间隔


样本的分布比较优雅和线性可分的假设上,在这种情况下可以找到近乎完美的超平面对两类样本进行分离。但如果遇到下面这两种情况呢?左图,负类的一个样本点A不太合群,跑到正类这边了,这时候如果按上面的确定分类面的方法,那么就会得到左图中红色这条分类边界,嗯,看起来不太爽,好像全世界都在将就A一样。

为了处理这种情况,我们允许数据点在一定程度上偏离超平面。也就是允许一些点跑到H1和H2之间,也就是他们到分类面的间隔会小于1。如下图

具体来说,原来的约束条件就变为:

        这时候,我们在目标函数里面增加一个惩罚项,新的模型就变成(也称软间隔):

引入非负参数ξi后(称为松弛变量),就允许某些样本点的函数间隔小于1,即在最大间隔区间里面,或者函数间隔是负数,即样本点在对方的区域中。而放松限制条件后,我们需要重新调整目标函数,以对离群点进行处罚,目标函数后面加上的第二项就表示离群点越多,目标函数值越大,而我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。这时候,间隔也会很小。我们看到,目标函数控制了离群点的数目和程度,使大部分样本点仍然遵守限制条件。

经过同样的推导过程,我们的对偶优化问题变成:

之前模型唯一不同在于 αi 又多了 αi <=C的限制条件
至于上面如何变化的就是KKT条件来分析了在(原问题)中我们观察系数

我们的最优解需要满足KKT条件:

      同时βi*ξi*都需要大于等于0,而αi*需要在0和C之间。那可以分三种情况讨论:

       总的来说就是, KKT条件就变成了:

第一个式子表明如果αi=0,那么该样本落在两条间隔线外。第二个式子表明如果αi=C,那么该样本有可能落在两条间隔线内部,也有可能落在两条间隔线上面,主要看对应的松弛变量的取值是等于0还是大于0,第三个式子表明如果0<αi<C,那么该样本一定落在分隔线上(这点很重要,b就是拿这些落在分隔线上的点来求的,因为在分割线上wTx+b=1或者-1嘛,才是等式,在其他地方,都是不等式,求解不了b)。


通过KKT条件可知,αi不等于0的都是支持向量,它有可能落在分隔线上,也有可能落在两条分隔线内部。

核函数

如果我们的正常的样本分布如下图左边所示,之所以说是正常的指的是,不是上面说的那样由于某些顽固的离群点导致的线性不可分。它是真的线性不可分。样本本身的分布就是这样的,如果也像样本那样,通过松弛变量硬拉一条线性分类边界出来,很明显这条分类面会非常糟糕。

如上图右,如果我们可以把我们的原始样本点通过一个变换,变换到另一个特征空间,在这个特征空间上是线性可分的,那么上面的SVM就可以轻易工作了。也就是说,对于不可分的数据,现在我们要做两个工作:

1)首先使用一个非线性映射Φ(x)将全部原始数据x变换到另一个特征空间,在这个空间中,样本变得线性可分了;

2)然后在特征空间中使用SVM进行学习分类。


第二个工作没什么好说的,和前面的一样。那第一个粗重活由谁来做呢?我们怎么知道哪个变换才可以将我们的数据映射为线性可分呢?数据维度那么大,我们又看不到。另外,这个变换会不会使第二步的优化变得复杂,计算量更大呢?对于第一个问题,有个著名的cover定理:将复杂的模式分类问题非线性地投射到高维空间将比投射到低维空间更可能是线性可分的。OK,那容易了,我们就要找到一个所有样本映射到更高维的空间的映射。对不起,其实要找到这个映射函数很难。但是,支持向量机并没有直接寻找和计算这种复杂的非线性变换,而是很智慧的通过了一种巧妙的迂回方法来间接实现这种变换。它就是核函数,不仅具备这种超能力,同时又不会增加太多计算量的两全其美的方法。

我们可以回头看看上面SVM的优化问题:

      可以看到,对样本x的利用,只是计算第i和第j两个样本的内积就可以了。

也是计算两个样本的内积。也就是说,训练SVM和使用SVM都用到了样本间的内积,而且只用到内积。那如果我们可以找到一种方法来计算两个样本映射到高维空间后的内积的值就可以了。核函数就是完成这伟大的使命的:

K(xi, xj)=Φ(xi)T Φ(xj)

       也就是两个样本xixj对应的高维空间的内积Φ(xi)T Φ(xj)通过一个核函数K(xi, xj)计算得到。而不用知道这个变换Φ(x)是何许人也。

而且这个核函数计算很简单,常用的一般是径向基RBF函数:

     这时候,我们的优化的对偶问题就变成了:

和之前的优化问题唯一的不同只是样本的内积需要用核函数替代而已。优化过程没有任何差别。而决策函数变成了:


不同的理解:
大部分样本的拉格朗日因子αi都是0,所以其实我们只需要计算少量的训练样本和新来的样本的核函数,然后求和取符号即可完成对新来样本x的分类了。支持向量机的决策过程也可以看做一种相似性比较的过程。首先,输入样本与一系列模板样本进行相似性比较,模板样本就是训练过程决定的支持向量,而采用的相似性度量就是核函数。样本与各支持向量比较后的得分进行加权后求和,权值就是训练时得到的各支持向量的系数αi和类别标号的成绩。最后根据加权求和值大小来进行决策。而采用不同的核函数,就相当于采用不同的相似度的衡量方法。
从计算的角度,不管Φ(x)变换的空间维度有多高,甚至是无限维(函数就是无限维的),这个空间的线性支持向量机的求解都可以在原空间通过核函数进行,这样就可以避免了高维空间里的计算,而计算核函数的复杂度和计算原始样本内积的复杂度没有实质性的增加。

参考文献:

http://blog.csdn.net/zouxy09/article/details/17291805
http://blog.csdn.net/han_xiaoyang/article/details/52678373




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值