SVM(Support Vector Machine)读书笔记二(支持向量和Kernel方法)

原创 2015年11月29日 14:17:44

在一个线性不可分的样本中,用添加多次项特征可以将两类样本分开,具体原理请参考 这里,用SVM分类器也是同样道理。如果两类样本交叉越多,需要越高次的特征,模型就越复杂,这在存储上和计算资源上都是很大的开销。SVM用kernel方法就解决了这个问题,kernel方法是将高维度的计算放到低维度来做,最后得到的是高纬度上的模型。具体原理请看下面的推导。

特征转换

如果样本在低纬度空间不可分,那么可以将样本的特征从低维度空间投影到高纬度空间,如下图所示
这里写图片描述
而一般从低纬度空间向高纬度空间投影的方法就是往已有的特征中添加多项式特征项,再来看下面一个图
这里写图片描述
上面三个图中,在(x1,x2)这个空间中,两类样本线性不可分,即在(x1,x2)空间中的所有线性模型都无法将这两类样本区分开。如果把这个空间投影到比如(x1,x2,x21,x21x2,x21x22,x21x32,x31x2,…)这样的一个空间中就变得线性可分了(当然有过拟合的风险),在这个高纬度的空间中的超平面表现在(x1,x2)空间中就是图三所示的一条曲线,图二则是将(x1,x2)投影到二次项组成的4维空间中。

SVM的对偶问题

假设已经通过ϕ(x)将样本投影到了能够将两类样本分开的z空间,那么需要解决的优化问题为:

minw,b12wTw;s.t.yn(wTϕ(x)+b)1,n=1...N

上一篇中讲到可以用二次规划解这个问题,只要把Q,p,A,c丢进解二次规划的软件里就可以得到解,这里对应的特征是投影之后的高纬度特征。
Q=[00Td0dId];p=0;A=y1ynxT1y2y2xT2.......ynynxTn,c=1

问题是,这里的Q是和投影之后的维度有关的,如果投影到的空间是很高维甚至无穷维,这个问题就没法解了。为了解这个问题,就需要把原来的问题转化成它的对偶形式,让这个问题的求解和转换后的维度没有关系,只和输入的样本的个数有关。

SVM的求解是一个带约束的最佳化问题:

minw12wTw;s.t.yn(wTxn+b)1,n=1,2...N

解上面这个带约束的最佳化问题可参考Lagrange乘子法(可参考https://en.wikipedia.org/wiki/Lagrange_multiplier),把约束放进式子中,写成Lagrange表达式为:

L(b,w,α)=12wTw+i=1i=Nαi(1yn(wTzn+b))

首先,用 Lagrange 乘子法可以将上面的最优化问题写成下面的形式:
minw,bmaxαL(b,w,α)=minw,b12wTw+maxαi0,i=1..Ni=1i=Nαi(1yn(wTzn+b))

这里,为什么这个最优化问题和上面的n个不等式约束的优化问题是等价的呢?
上面优化过程中,先固定住w,b,根据α来进行最大化,在w,b满足(1yn(wTzn+b))0时候,最大化α那项最大是无穷(这里w,b的集合假设为s1);w,b满足(1yn(wTzn+b))0时候,最大化是α那项是0(这里w,b的集合假设为s2)。第二次是找到最小化那个表达式的w,b, 当然选取的w,b肯定是s2里面的,因为s1根本不可能最小化,所以在最后的解里(1yn(wTzn+b))0肯定成立。

上式中,把w,b固定住,变动α,要得到最大的那个α,那么minw,bL(b,w,α)比任何α的项要大,那么minw,bmaxαL(b,w,α)minw,bL(b,w,α),当然也比这里面变动α取最大的那个要大即

minw,bmaxαL(b,w,α)maxαminw,bL(b,w,α)

上面这个问题叫做Lagrange对偶问题,在满足KKT条件的时候,不等号可以改成等号,即这两个问题是等价的。在SVM这个问题中,刚好满足KKT条件(后面会讲到),因此求解不等号前面的问题可以转换为求解不等号后边的问题。这样的转换好处是,右边的问题是关于w,b的没有约束的问题,而α是带约束的,w,b没有约束可以直接通过求偏导等于0解出w,b
求解问题写成下面的形式:
maxαminw,b12wTw+n=1n=Nαn(1yn(wTzn+b))

先对b求偏导,可以得到:
n=1n=Nαnyn=0

把上面得到的条件代入原式子中得到
maxαminw,b12wTw+n=1n=Nαn(1ynwTzn)

再对w求偏导,让偏导等于0,得出
w=n=1n=Nαnynzn

再把上面得到的w加入原问题中,可以得到:
maxαminw,b12wTw+n=1n=Nαnn=1n=NαnynwTzn)

maxαminw,b12(n=1n=Nαnynzn)2+n=1n=Nαn)

代入之后发现,w,b都消失了,因此,就可以专心对α求解了,写成如下:
maxα0,w=n=Nn=1αnynzn,n=Nn=1αnyn=0(12(n=1n=Nαnynzn)2+n=1n=Nαn)

等价于
minα0(12n=1Nm=1NαnαmynymzTnzmn=1n=Nαn)

s.tn=1Nynαn=0;αn0,n=1,2,3...N

KKT条件

  1. 原问题的条件:yn(wTϕ(x)+b)1
  2. 对偶问题的条件:α0
  3. 对偶问题推导中需要满足的条件:n=Nn=1αnyn=0;w=n=Nn=1αnynzn
  4. 对偶问题中:αn(1yn(wTzn+b)=0(这里,最优化后,这个条件一定是满足的,0是最大值)。这里,αn1yn(wTzn+b)这两个项里必须有一个是0

满足了上面的KKT条件,这个问题就是原问题的对偶形式了,解这个问题就等于解原问题。而上面的最小化α式子就是QP问题的标准形式了,对应的,只要求出Q,p,A,c,然后丢到解二次规划的软件中就可以解得所有的α
化简整理一下,对应的对偶问题是

minα12αTQα+pTα;subjectto.aTiαci

Q矩阵是N乘N的矩阵,其中的每一项qn,m=ynymzTnzm, 其他几个参数表示过程这边就省略了。在这个Q矩阵中如果z是很高维的话,,而且这个Q不是一个稀疏矩阵,N很大的话会消耗非常多的计算和存储资源,z空间维度很高加上N很大,这个QP问题就解不出来了。(注:kernel技巧就是为了解决这个问题诞生的,后面会讲到)

Support Vector

上面KKT条件中,有一个αn(1yn(wTzn+b)=0,要使得它成立,那么α1yn(wTzn+b)必须有一个为0。如果αn不为0,那么yn(wTzn+b)=1肯定成立,而这样的点刚好是在margin上面。因此从解得的答案中看出,αn>0的那些点都是Support Vector。

因此w可以表示成Support Vector的形式,w=SVαnynzn,即支持向量的线性组合。而b则只需要将任意一个支持向量代入yn(wTzn+b)=1中即可求解

b=yiwTzi=yi(SVαnynzn)zi=yiSVαnynznzi

w和b都代入最佳超平面方程中,得到:

gsvm(x)=wz+b=svαnynzTnz+b=svαnynk(xn,x)+b

Kernel技巧

上面推导过程中,在解二次规划问题中的qn,m=ynymzTnzm,由于这是一个dense矩阵,并且在z空间很高维的情况下,会消耗巨大的计算和存储资源。kernel要解决的问题就是把z空间中的计算放到x空间来做,同时z空间的计算和x空间的计算是等价的。
x空间通过特征转换变到z空间,z空间是长这个样子:

ϕ(x)=(1,x1,x2...xd,x21,x1x2.x1xd,x2x1,x22,...x2d)

d维的x空间,变到z空间维度就达到了d的指数次方个,在z空间的两个向量内积,可以写成下面的形式
ϕ(x1)ϕ(x2)=1+i=1dx1x2+i=1dj=1dx1ix1jx2ix2j=1+i=1dx1x2+i=1dx1ix2ij=1dx1jx2j=1+xTx+(xTx)2

上面这个公式说明,在z空间的内积可以放在x空间进行,得到的结果是一样的。
假设k(x1,x2)=1+xT1x2+(xT1x2)2,之前推导出来的qn,m=ynymzTnzm=ynymk(xn,xm),原来的zTnzm需要在很高维进行,现在利用这个kernel方法,简化了这个计算。

Kernel的类型

上面的空间变换中,ϕ(x)=(1,x1,x2xd,x21,x1x2.x1xd,x2x1,x22,x2d)
如果在常数项前加上一些值,在一次项上加上一些值,在两次项上加上一些值,那么可以表示成两次的kernel。

ϕ(x)=(β+φxT1x2)2

另外还有高次的kernel,可以表示成
ϕ(x)=(β+φxT1x2)Q

多次项kernel也有限制,比如真实的模型如果高于指定的次数,那么就不太会得到非常好的模型。
高斯核函数(又叫RBF Kernel)就解决了这个问题,它可以将x空间的向量投影到无穷维(又叫西伯尔特空间)。定义如下:
k(x1,x2)=exp(|x1x2|2)

那么它是如何映射到无穷维的呢,可以通过泰勒展开推导如下:
k(x1,x2)=exp(x21+2x1x2x22)=exp(x21)exp(2x1x2)exp(x22)=exp(x21)exp(x22)i=0(2x1x2)ii!=i=0exp(x21)2xi1i!exp(x22)2xi2i!=ϕ(x1)Tϕ(x2)

ϕ(x)=exp(x2)(1,2x,2x22!2x33!,...)

利用高斯kernel可以把特征转换到无穷维空间,理论上可以将任何两类样本分开,这就是高斯kernel强大的地方,但是缺点是参数弄不好会导致模型过拟合,于是在参数选择过程中要小心。

  1. 多项式核由于是幂的形式,如果在x很大的情况下,transform之后的数值会非常大或者非常小,这会给模型造成不精确的问题,但是高斯核就避免了这个问题,它的值都是在0和1之间
  2. 多项式核的优势在于如果你知道模型项不会很高的情况,用这个可以更好的解释模型。实在是无法想象无穷维空间是怎么样的。

除了上面说到的这些kernel,还可以自定义一些kernel,如果你不喜欢上面提到的kernel的特征转换,那么可以自己定义,但是不是所有的函数都可以是kernel(因为不是所有函数可以转化成两个相同向量内积的形式),需要满足Mercer’s condition:

  1. Kernel矩阵必须是对称的
  2. kernel矩阵必须是半正定的

总结

有了核函数和上面的推导,最后的svm函数可以写成

gsvm(x)=wx+b=svαnynzTnzn+b=svαnynk(xn,x)+b

b=yiSVαnynznzi=yiSVαnynk(xn,xi)

有了核函数,可以将低维空间的特征投影到高维空间同时只消耗低维空间的计算量,而让模型更强大(可以区分任意样本);有了支持向量,在计算w的时候只需要少许几个样本(Support Vector是稀疏的),同时也减少了计算量。于此同时,可以让模型获得更强大的能力,区分更复杂的数据,但是模型一复杂,就会出现很大的overfit问题,虽然large margin在一定程度上保证了泛化能力,但是在无穷维空间,什么事情都会发生。
上面的推导都是通过把样本映射到高维度,使得样本完全线性可分,然后用相关算法把样本分开。这种方法会有很大的过拟合的风险,想象下如果数据有很多噪声,本来可以在低维分开的,非得去高维空间。Soft margin SVM就是用来解决这个问题,它能够容忍模型有一定噪声的存在,从而减小了发生过拟合问题的风险。

我的微信公众号是:数据科学家的日常,会记录一些我平时的学习心得以及各种机器学习算法的学习笔记,欢迎关注。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Standford机器学习 逻辑回归(Logistic Regission)以及过拟合问题解决(Regularization)

1.分类问题 判断一封邮件是否为垃圾邮件,判断肿瘤是良性的还是恶性的,这些都是分类问题。在分类问题中,通常输出值只有两个(一般是两类的问题,多类问题其实是两类问题的推广)(0叫做负类,1叫做正...

SVM(Support Vector Machine)读书笔记二(支持向量和Kernel方法)

在一个线性不可分的样本中,用添加多次项特征可以将两类样本分开,具体原理请参考 这里,用SVM分类器也是同样道理。如果两类样本交叉越多,需要越高次的特征,模型就越复杂,这在存储上和计算资源上都是很大的开...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

支持向量机SVM(Support Vector Machine)

1 简介 支持向量机基本上是最好的有监督学习算法了。最开始接触SVM是去年暑假的时候,老师要求交《统计学习理论》的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相关概念...

SVM支持向量机(Support Vector Machine)

#include #include #include #include int main(int argc, char **argv) { intsize= 400; ...

支持向量机SVM(Support Vector Machine)

支持向量机

Andrew Ng《Machine Learning》第七讲——支持向量机SVM(Support Vector Machine)

支持向量机(Support Vector Machine)-----SVM之SMO算法(转)

此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法。SMO由微软研...

支持向量机SVM(Support Vector Machine)算法初解

其实SVM在去年的时候就接触到了,只是一直都属于模模糊糊的状态,最近跟着老板一起上机器学习的课,有种豁然开朗的感觉,于是乘机写下这篇博客。 每个算法都有一个优化的准则,SVM也不例外,他运用的是最大...

支持向量机(support vector machine)

支持向量机SVM 支持向量机(support vector machine,SVM)是由Cortes和Vapnik在1995年提出的,由于其在文本分类和高维数据中强大的性能,很快就成为机器学习的主流...

支持向量機器 (Support Vector Machine)

http://cg2010studio.wordpress.com/2012/05/20/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%A9%9F%E5%99%A8-...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)