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就是用来解决这个问题,它能够容忍模型有一定噪声的存在,从而减小了发生过拟合问题的风险。

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

Kernel SVM (核函数支持向量机)

1. SVM 目标函数及约束条件SVM 的介绍及数学推导参考:我的CSDN,此处直接跳过,直接给出 SVM 的目标函数和约束条件:minw,b12wTws.t.yn(wTxn+b)≥1,n=1,..N...
  • llcchh012
  • llcchh012
  • 2015年07月13日 17:49
  • 5153

Stanford机器学习---第八讲. 支持向量机SVM

本栏目(Machine learning)包括单参数的线性回归、多参数的线性回归、Octave Tutorial、Logistic Regression、Regularization、神经网络、机器学...
  • abcjennifer
  • abcjennifer
  • 2012年08月12日 16:55
  • 104611

SVM kernel(三)

# coding=utf-8 from numpy import * import matplotlib import matplotlib.pyplot as plt from matplotlib...
  • miao6664659
  • miao6664659
  • 2013年08月20日 11:19
  • 1218

《机器学习实战》和Udacity的ML学习笔记之 支持向量机&kernel

1. 支持向量机&支持向量支持向量机实质就是一个二分类的线性分类器,支持向量就是数据集中的一些点,这些点到分类线条的距离最短,用来求解分类线条模型。如果无法通过直线分类,就需要通过一些技巧,将数据投射...
  • ml_1019
  • ml_1019
  • 2017年08月24日 12:04
  • 114

SVM中的Kernel技术

对于SVM的基础知识,可以参考这篇博客《支持向量机SVM学习笔记》,本片博客主要讨论SVM中kernel的使用。 SVM中原始问题和对偶问题的定义 其中N为训练样本点的个数,d为特征向量x的维度...
  • fenghuangdesire
  • fenghuangdesire
  • 2015年04月27日 10:58
  • 2158

机器学习(一)支持向量机(Support Vector Machine)

1.SVM简介1.1 什么是支持向量机支持向量机(Support vector machine)通常用在机器学习 (Machine learning)。是一种监督式学习 (Supervised Lea...
  • xidiancoder
  • xidiancoder
  • 2016年03月17日 15:11
  • 4410

kernel

# shizsun@gmail.com # 2018-01-02 *前言 Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。[1] ...
  • u013926029
  • u013926029
  • 2018年01月02日 18:07
  • 15

机器学习里的kernel是指什么?

先给个定义:核函数K(kernel function)就是指K(x, y) = ,其中x和y是n维的输入值,f(·) 是从n维到m维的映射(通常而言,m>>n)。是x和y的内积(inner produ...
  • GoodShot
  • GoodShot
  • 2017年01月11日 07:31
  • 1081

Kernel SVM (核函数支持向量机)

1. SVM 目标函数及约束条件SVM 的介绍及数学推导参考:我的CSDN,此处直接跳过,直接给出 SVM 的目标函数和约束条件:minw,b12wTws.t.yn(wTxn+b)≥1,n=1,..N...
  • llcchh012
  • llcchh012
  • 2015年07月13日 17:49
  • 5153

SVM 中 rbf kernel 的意义 —— 一个不怎么严谨的解释

http://discussions.youdaxue.com/t/svm-rbf-kernel/6088 在我们机器学习的过程中,很多同学包括我自己也疑惑过rbf kernel函数的实际作用是...
  • cwcww1314
  • cwcww1314
  • 2016年09月03日 20:11
  • 4896
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SVM(Support Vector Machine)读书笔记二(支持向量和Kernel方法)
举报原因:
原因补充:

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