机器学习-支持向量机

来源:互联网 发布:淘宝优惠券自动发送 编辑:程序博客网 时间:2024/04/30 16:02

参考网上的SVM和pluskid对支持向量机的讲解,同时也看了Andrew Ng的机器学习视频,自己整理了下,以后好复习。

引文:自支持向量机SVM问世以来,就被推崇为最好的分类算法。神经网络算法也比较流行,但由于神经网络比较复杂,所以很多时候使用的并不是神经网络而是SVM。博主在看paper的时候,很多的paper用到的无非就是SVM,RM之类的。像Adaboost这中算法我还没看到论文里面用过,有时间自己去尝试下,看看效果如何。

对于本章节,会分两个层次来讲

  • 线性可分
  • 线性不可分

要明白什么是支持向量机 Support Vector Machines(SVM) ,便得从分类说起。

分类作为数据挖掘领域中一项非常重要的任务,它的目的是学会一个分类函数或分类模型(或者叫做分类器),该模型能吧数据库中的数据项映射到给定类别中的某一个,从而可以用于预测未知类别。

这里写图片描述

而支持向量机是 90 年代中期发展起来的基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小
来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良
好统计规律的目的。
本文将要介绍的支持向量机算法便是一种分类方法。

1.线性可分

对于下面这种二维平面上的线性分类
这里写图片描述

这种直线可以找到多个,但是哪一个属于最佳的分割线呢?

给出一个类别y,取值为{-1,1},和特征向量x,构建一个分类函数:

hw,b(x)=g(wTx+b)

假设z(x)=wTx+b,可以假设如果z>=0,则g(z)=1,反之则g(z)=1。如下图所示:

这里写图片描述

图中的直线其实就是wTx+b=0的情况。那么问题来了,我们应该怎么来找到这样一条最好的直线,将数据分成两类呢?

下面先引进两个理论知识,函数间隔几何间隔

1.1函数间隔

在数学上,一般而言,一个点距离超平面的远近可以表示为分类预测的确信或准确程度。我们定义函数间隔为

这里写图片描述

接着,我们定义超平面 (w, b) 关于训练数据集 T 的函数间隔为超平面 (w, b) 关于 T 中所有样本点 (xi,yi) 的函数间隔最小值,其中 x 是特征, y 是结果标签, i 表示第 i 个样本,有
这里写图片描述

然与此同时,问题就出来了。上述定义的函数间隔虽然可以表示分类预测的正确性和确信度,但在选择分类超平面时,只有函数间隔还远远不够,因为如果成比例的改变 w 和 b,如将他们改变为 2w 和 2b,虽然此时超
平面没有改变,但函数间隔的值 yf(x) 却变成了原来的 4 倍。

其实,我们可以对法向量 w 加些约束条件,使其表面上看起来规范化,如此,我们很快又将引出真正定义点到超平面的距离——几何间隔的概念。

1.2 几何间隔

说到几何间隔,先看看下面这幅图:


这里写图片描述

图中有一个A点和B点,还有一条直线将图中的点分成两类,还有一个向量w,这个向量其实就是我们后面所说的支持向量

图中A到B之间的距离γ(i)w||w||表示单位长度的向量,因为A代表着x(i)点,那么图中的B点可以表示为x(i)γ(i)w||w||。因为B点是位于决策边界上,而决策边界上的点都满足wTx+b=0,所以有

wT(x(i)γ(i)w||w||)+b=0

解这个方程得到

γ(i)=wTx(i)+b||w||=(w||w||)Tx(i)+b||w||

不过这里的γ(i)是带符号的,我们需要的是它的绝对值,因此只需要让它乘以一个y就可以了,因为当分类为正样本时,y=1,为负样本时,y=1,所以不管怎么样yγ(i)就是|γ(i)|。即

γ(i)=y(i)(w||w||)Tx(i)+b||w||

我们需要的是得到最大的几何间隔,那么这里采用的一种思想就是取函数γ的最小值,然后让其最小值最大即可。(即最大最小)
几何间隔为:

γ=mini=1,2,...,m γ(i)

说明:函数间隔 y(wTx+b)=yf(x) 实际上就是 |f(x)|,只是人为定义的一个间隔度量;而几何间隔|f(x)w才是直观上的点到超平面距离。

想想二维空间里的点到直线公式:假设一条直线的方程为 ax+by+c=0,点 P 的坐标是 (x0,y0),则点到直线距离为|ax0+by0+c|(a2+b2)


这里写图片描述

那么如果用向量表示,设 w = (a, b), f(x) = wTx + c,分割线的表达式为wTx+b=0,那么这个距离正是
d=wTx(i)+b(wT)2=|f(x(i))|w
.

1.3 最大间隔分类器

通过上面的分析,得到最小的集合间隔的表达式

γ=mini=1,2,...,m γ(i)

我们要的得到的是使最小的间隔最大,座椅定义最大间隔分类器为

max  γ

s.t  y(i)(wTx(i)+b)>=γ,i=1,2,...,m

||w||=1

上面的||w||=1是为了确保函数间隔等于几何间隔,这样就能够保证所有的几何间隔大于等于γ

函数间隔:γ1=y(wTx+b)
几何间隔:γ2=y(wTx+b)||w||

所以几何间隔γ2=γ1||w||,所以上面的最大间隔分类器变为:

max  γ1||w||

s.t  y(i)(wTx(i)+b)>=γ1,i=1,2,...,m

我们假设函数间隔为γ1=1,则几何间隔就可以得出γ2=1||w||,相应的最大间隔分类器就化简为:

max  1||w||

s.t   y(i)(wTx(i)+b)>=1,i=1,2,...,m

max  1||w||做点处理方便计算,取它导数的平方的最小值,得到

min  12||w||2

s.t  y(i)(wTx(i)+b)>=1,i=1,2,...,m

到这个形式以后,就可以很明显地看出来,它是一个凸优化问题,或者更具体地说,它是一个二次优化问题——目标函数是二次的,约束条件是线性的。这个问题可以用任何现成的 QP Quadratic Programming 的优化包进行求解可以很快的求得w和b值。

所谓支持向量机,支持向量就是需要求得向量w,这里的机就是一种算法。

2.线性不可分情况

2.1 从原始问题到对偶问题

回忆一下之前得到的优化目标的二次优化问题,将s.t稍微的变化下,

min  12||w||2

s.t  y(i)(wTx(i)+b)1>=0,i=1,2,...,m

虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过 Lagrange 对偶变换到对偶变量 Dual Variable 的优化问题之后,可以找到一种更加有效的方法来进行求解,而且通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。

也就说,除了用解决 QP 问题的常规方法之外,还可以应用Lagrange 对偶性,通过求解对偶问题得到最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。

接下来,你将看到“对偶变量的优化问题”等类似的关键词频繁出现,便是解决此凸优化问题的第二种更为高效的解——对偶变量的优化求解。

至于上述提到,关于什么是 Lagrange 对偶性?简单地来说,通过给每一个约束条件加上一个 Lagrange 乘子,即引入 Lagrange 对偶变量 α,如此我们便可以通过 Lagrange 函数将约束条件融和到目标函数里去(也就是说把条件融合到一个函数里头,现在只用一个函数表达式便能清楚的表达出我们的问题)。


这里写图片描述

这里的βi称之为拉格朗日系数,我们通过对变量求偏导数,然后令偏导数等于0来求解该方程式。


这里写图片描述

可以通过该方程组求得相应的wβ

对于我们的模型

min  12||w||2

s.t  y(i)(wTx(i)+b)1>=0,i=1,2,...,m

可以将限制条件变成

gi(w)=y(i)(wTx(i)+b)+10

通过拉格朗日乘数法得到

L(w,b,α)=12||w||2Σmi=1 αi[y(i)(wTx(i)+b)1]

通过求偏导数
这里写图片描述
最后得到

w=i=1nαiy(i)x(i)

同样对b求骗到数后得到:

i=1nαiy(i)=0

将w带入到

L(w,b,α)=12||w||2i=1m αi[y(i)(wTx(i)+b)1]

最后得到:

这里写图片描述

后面的刚好是对b求导后等于的式子,所以整个式子就变成了

这里写图片描述

最后我们得到的对偶式子为:

这里写图片描述

而b可以通过下面式子求出来
这里写图片描述

最后整个决策模型就变成了这样

wTx+b=(i=1nαiy(i)x(i))T x+b=i=1nαiy(i)<x(i),x>+b

其中<x(i),x>表示的是x(i)x的内积。

2.2 核函数

在上文中,我们已经了解到了支持向量机处理线性可分的情况,而对于非线性的情况,支持向量机的处理方法是选择一个核函数 κ(·,·),通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。由于核函数的优良品质,这样的非线性扩展在计算量上并没有比原来复杂多少,这一点是非常难得的。当然,这要归功于核方法——除了支持向量机之外,任何将计算表示为数据点的内积的方法,都可以使用核方法进行非线性扩展。

简而言之:在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射(核函数)将输入变量映射到一个高维特征空间,在这个空间中构造最优分类超平面2.1。我们使用支持向量机进行数据集分类工作的过程首先是同预先选定的一些非线性映射将输入空间映射到高维特征空间。

原来的决策函数时f(x)=wTx+b,加入核函数之后就类似这样

i=1nwiϕi(x)+b

其中 ϕ:xf 是从输入空间到某个特征空间的映射,这意味着建立非线性学习器分为两步:
1. 首先使用一个非线性映射将数据变换到一个特征空间f
2. 然后在特征空间使用线性学习器分类。
3.
在上文我提到过对偶形式,而这个对偶形式就是线性学习器的一个重要性质,这意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:

f(x)=i=1n αiyi<ϕ(xi),ϕ(x)>+b

如果有一种方式可以在特征空间中直接计算内积<ϕ(xi),ϕ(x)>,就像在原始输入点的函数中一样,就有可能将两个步骤融合到一起建立一个非线性的学习器, 这样直接计算法的方法称为核函数方法,于是,核函数便横空出世了。

这里我直接给出一个定义:核是一个函数κ,对所有x,zX,满足κ(x,z)=<ϕ(xi),ϕ(x)>,这里 ϕ(·) 是从原始输入空间 X 到内积特征空间 F 的映射。

简而言之,如果不是用核技术,就会先计算线性映射 ϕ(x1)ϕ(x2),然后计算这两个特征的内积,使用了核技术之后,先把 ϕ(x1)ϕ(x2) 的一般表达式 <ϕ(x1),ϕ(x2)>=κ(<x1,x2>)计算出来,这里的 <, 表示内积, k 就是对应的核函数,这个表达往往非常简单,所以计算非常方便。

通过之前的推导,得到的最终分类函数是这样的

h(x)=i=1nαiy(i)<x(i),x>+b

现在通过映射后,得到

h(x)=i=1nαiy(i)<ϕ(xi),ϕ(x)>+b

而其中的 α 也是通过求解如下的对偶问题而得到的


这里写图片描述

这样一来问题就解决了吗?似乎是的:拿到非线性可分的数据,就找一个映射 ϕ(·),然后一股脑把原来的数据映射到新空间中,再按照线性可分情况下支持向量机的求解方法来做即可。不过事实上没有这么简单!其实刚才的方法稍想一下就会发现有问题:在最初的例子里,我们对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;如果原始空间是三维,那么我们会得到 19 维的新空间,这个数目是呈爆炸性增长的,这给 ϕ(·) 的计算带来了非常大的困难,而且如果遇到无穷维的情况,就根本无从计算了。所以就需要核函数出马了。

不妨还是从最开始的简单例子出发,设两个向量 x1 = (η1, η2) 和 x2 = (ξ1, ξ2),而 ϕ(·) 即是到前面说的五维空间的映射,因此映射过后的内积为:

ϕ(x1),ϕ(x2)=η1ξ1+η21ξ21+η2ξ2+η22ξ22+η1η2ξ1ξ2

可以看出

(x1,x2+1)2=2η1ξ1+η21ξ21+2η2ξ2+η22ξ22+2η1η2ξ1ξ2+1

二者有很多相似的地方,实际上,我们只要把某几个维度线性缩放一下,然后再加上一个常数维度,具体来说,上面这个式子的计算结果实际上和映射

φ(X1,X2)=(2X1,X21,2X2,X22,2X1X2,1)

之后的内积 φ(x1),φ(x2) 的结果是相同的,那么区别在于什么地方呢?

1. 一个是映射到高维空间中,然后再根据内积的公式进行计算;2. 而另一个则直接在原来的低维空间中进行计算,而不需要显式地写出映射后的结果。

回忆刚才提到的映射的维度爆炸,在前一种方法已经无法计算的情况下,后一种方法却依旧能从容处理,甚至是无穷维度的情况也没有问题。

我们把这里的计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数 Kernel Function,例如,在刚才的例子中,我们的核函数为:

κ(x1,x2)=(x1,x2+1)2

核函数能简化映射空间中的内积运算——刚好“碰巧”的是,在我们的支持向量机里需要计算的地方数据向量总是以内积的形式出现的。对比刚才我们上面写出来的式子,现在我们的分类函数为:

h(x)=i=1nαiy(i)k(x(i),x)+b

其中 α 由如下的对偶问题求解而得。


这里写图片描述

这样一来计算的问题就算解决了, 避开了直接在高维空间中进行计算,而结果却是等价的!当然,因为我们这里的例子非常简单,所以我可以手工构造出对应于 φ(·) 的核函数出来,如果对于任意一个映射,想要构造出对应的核函数就很困难了。

常用的几个核函数

名称 公式 线性核
κ(x1,x2)=x1,x2
多项式核
κ(x1,x2)=(x1,x2+R)d
高斯核
κ(x1,x2)=exp{x1x222σ2}


核函数的本质

核函数总结有以下两点:

  • 实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去(映射到高维空间后,相关特征便被分开了,也就达到了分类的目的);
  • 如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的(如上文中 19 维乃至无穷维的例子)此时,核函数就隆重登场了,核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。

好了,SVM就写到这里吧,有时间再补充序列最小化算法SMO和添加松弛变量的情况。

Reference

Stanford大学机器学习视频:http://open.163.com/movie/2008/1/C/6/M6SGF6VB4_M6SGJVMC6.html
Pluskid支持向量机系列:http://blog.pluskid.org/?page_id=683
July支持向量机三重境界PDF:http://vdisk.weibo.com/s/zrFL6OXKgnlcp



本栏目Machine Learning 算法实现持续更新中,欢迎关注:Dream_Angel_Z博客




0 0