支持向量机(SVM)

来源:互联网 发布:管理学培训课程网络 编辑:程序博客网 时间:2024/06/03 02:26

综述

支持向量机(Support Vector Machines), 是一种二分类模型.也可以通过技巧,转化为多分类模型.比如说libSVM中就使用了one-against-one的策略使得SVM能够扩展到多分类.而libLiner则使用了one-against-rest的策略来扩展SVM.

这里写图片描述

支持向量机的基本模型: 定义在特征空间上的间隔最大化的线性分类器(间隔最大化也使得SVM区别于感知机).

学习策略: 间隔最大化.

学习算法: 求解凸二次规划的最优化算法. 其中一种快速学习算法,叫做序列最小最优化算法(SMO).
支持向量机可以从简到繁分为三大类,分别适用于三种不同的场景.

  1. 线性可分支持向量机(linear support vector machine in linearly separable
    case)
    适用于待分类数据线性可分的情况.能够得到唯一的最大间隔分离超平面.故又称为硬间隔支持向量机.
  2. 线性支持向量机(linear support vector machine)
    适用于待分类数据近似线性可分的情况.除少数点之外的大部分数据,都是线性可分时,通过软间隔最大化策略,可以学习到一个线性分类器.故又称为软间隔支持向量机.
  3. 非线性支持向量机(non-linear support vector machine)
    适用于待分类数据线性不可分的情况.通过核技巧再加上软间隔最大化,可以学习到一个非线性支持向量机,

第一章: 线性可分支持向量机

1.1 概述

考虑一个二分类问题.比如说,一个平面上,以一条直线为界,直线之上的部分属于正类,直线之下的部分属于负类.

这里写图片描述

如上图所示,红色直线之上的所有黄色点,均属于正类;红色直接之下的所有绿色点,均属于负类.每一个点,可以用坐标来表示.

则,所有数据,可以由两部分来完整的表达.第一部分就是其坐标,第二部分就是其所属类别.

上图所示为2维空间.我们将其推广到n维空间,每一个点的坐标可以记为xi, 每个坐标点所属的类别记为yi 坐标点所属空间为输入空间(χ =Rn), 类别属于特征空间(Ψ = {-1, +1}).这个地方,千万不要讲xiyi 理解成该样本的x坐标以及y坐标.
假设,给定一个特征空间上的训练数据集,

T={(x1,y1),(x2,y2),,(xN,yN)}

其中, xi∈ χ = Rn, yi ∈ Ψ = {-1,+1}, i=1,2,3,…,N; xi为第i个特征向量(可以理解为第i个点的坐标值), yixi的类标签. yi= +1时, xi属于正类; yi= -1时, xi属于负类.再假设数据是线性可分的.

一般而言,线性可分的数据,可以有无数条分离超平面(即上诉红色直接)将两者分开.即感知机就是这样,感知机是不唯一的.SVM采用间隔最大化策略,可得到唯一分离超平面.

1.2 间隔的度量

既然要将间隔最大化,那么就出现一个问题,间隔如何来度量呢?这个时候就要引入两种间隔度量方式:函数间隔和几何间隔.

在以前的高中数学知识中,我们应该知道,点到直线的距离是如何求解的.

假设,现在有一条直线l,直线解析式为:x2=kx1+b , 其中k为斜率, b为截距.某点A的坐标为x=(x1,x2),该点属于类别y;点法式方程: 0=kx1x2+b=(k,1)T(x1,x2)+b
其中(k,1)T表示向量(k, -1)的转置.

则,A点到直线的距离:

d=|x2kx1b|1+k2=|(x2kx1b)|1+k2=|(k,1)T(x1,x2)b|1+k2

显然, (k,1)T是直线的法向量ω的转置, k2+1是法向量的向量二范数.则:

d=|ωTx+b|||ω||

其中, ω为原直线的法向量, 原直线可由(ω,b)确定.

若A被正确分类,当A属于正类时, ωTx+b应该为正(A在直线的上方); 当A属于负类时, ωTx+b应该为负(A在直线的下方).则上式由可改写为:

d=yωTxb||ω||=y(ωT||ω||x+b||ω||)

上式就成为几何间隔.其本质就是点到直线(或超平面)的距离.


d=y(ωTx+b)

称为函数间隔.

1.3 线性支持向量机(硬间隔)求解

由直线的点法式方程可知,当(ω,b)同时扩大n(n>0)倍时,直线方程未改变,几何间隔也不会改变,而上诉函数间隔同时会扩大n倍.由上也可知函数间隔是几何间隔的‖ω‖倍.

弄清楚了间隔的问题,这个时候需要来推导间隔最大化问题.我们以dgdf分别表示几何间隔和函数间隔.即要求解下述最优化问题:

maxω,bdg

s.t.
yi(ωT||ω||xi+b||ω||)dg,i=1,2,...,N

由函数间隔与几何间隔的关系,上式可以改写成:

maxω,bdf||ω||

s.t.
yi(ωTxi+b)df,i=1,2,...,N

如上,将几何间隔最大化问题转化为函数间隔最大化问题.由之前分析可知,当(ω,b)同时扩大或缩小n倍时, df会随之改变n倍.那么总能有一个参数n使得函数间隔为1.则上述最优化问题中,可以直接以1来替代df.需最大化的目标函数变为1||ω|| , 而该目标函数和最小化12||ω||2是一个意思,则上诉最优化问题就可以等价于:

minω,b12||ω||2

s.t.
yi(ωTxi+b)1,i=1,2,...,N

上诉最优化问题就改写为一个凸二次规划问题了.就可以用最优化理论中各种求解凸二次规划算法来求解.求解出来最优解:ω,b

则线性可分支持向量机的分离超平面:

0=ω+b

分类决策函数:

f(x)=sign(ωx+b)

其中sign() 是符号函数.

1.4 支持向量

最后,我们得讲一讲支持向量机的名称由来.由上可知,我们的策略是寻求一个间隔最大的分离超平面.而间隔最大,就意味则,让距离最近的两个(或多个)不同类的点分别与分离超平面的距离最大,而与别的距离超平面较远的点没有太大关系.换句话说,就是大量数据中的极个别点决定的分离超平面.说到这儿,线性可分支持向量机也可以用这个办法得到其分离超平面,即找出距离最近的两个点,然后做一条连线,分离超平面就是过连线的中点并且垂直于连线的那个平面(这都是题外话了,因为实际使用的过程中,几乎不可能这样做的.效率太低,而且大部分情况数据都是线性不可分的).

通过上诉分析,我们可以得出一个结论.就是SVM是由极个别的特征向量确定的.而这些特征向量我们就成为支持向量(Support Vector). 在上诉最简单的情况下,支持向量就是函数间隔等于1的那些特征向量.

第二章: 线性支持向量机

2.1 线性支持向量机的求解

根据上诉章节所分析的内容, 我们将SVM的最终求解归结到求解一个凸二次规划问题.

minω,b12||ω||2

s.t.
yi(ωTxi+b)1,i=1,2,...,N

而上诉问题是在数据线性可分的情况下讨论的,即存在一张超平面能够绝对的将两类数据分在不同侧.

一般而言,实际运用中,很少有这么漂亮的数据,让你能够一刀将他们分开.其中难免会有少数数据是线性不可分的.就是你怎么切,都不能将所有数据分到不同侧.

如果SVM连这种问题都解决不了,那么SVM也就不会像现在这么火,被大家都拿来当神器的一样用了.

针对于那个个别的线性不可分的点又称为奇异点(outlier),我们引入松弛变量ξ来使之满足函数间隔大于等于1的条件.

minω,b12||ω||2+CNi=1ξi

s.t.
yi(ωTxi+b)1ξi

ξi0,i=1,2,...,N,

其中C是正则项(或者叫做惩罚项), 其含义有两点:

  1. 使得12||ω||2尽可能的小,即间隔尽量大.
  2. 使得误分类点尽量小

C增大时对误分类的惩罚就越大, C增小时对误分类的惩罚就越小.

ξi是对每个样本的松弛变量.使之满足条件.

上诉问题也是一个凸二次规划问题,其最优解(ω,b,ξ)是存在的.其中ω的解唯一, b的解将会属于某个区间.

线性支持向量机的分离超平面方程:

0=ω+b

分类决策函数:

f(x)=sign(ωx+b)

其中sign() 是符号函数.

2.2 支持向量

关于线性支持向量机的支持向量,显然,将会比线性可分支持向量机会多一些,因为其中奇异点对分离超平面也是有决定作用的.

这里写图片描述

如上图所示,其中ξi对应第i个点的松弛变量.显然上诉点中,仅有少数点决定分离超平面.对于线性可分支持向量机,其支持向量均位于上下两条虚线所示的超平面上.线性支持向量机存在奇异点,所以其支持向量不仅位于上下两超平面上(如6),介于两平面之间(如1,2),以及误分类那一侧的点(如3,4,5).其中,0<ξ1,ξ2<1;ξ3,ξ4,ξ5>1;ξ6=1;

第三章: 非线性支持向量机

3.1 概述

前面两章都只是铺垫,针对于实际运用中,前面两类SVM是很少用到的.而SVM正是由于该类的出现,才能够真正的广泛运用起来.

前面我们提到了线性可分,近似线性可分.而现实中,很多数据,是线性不可分的.

这里写图片描述

如上图所示,这样的数据,无论你刀法再好,也玩不出花儿来,都不能把他们一刀切开.一般而言,在低维度线性不可分的数据,再高纬度下,是能够线性可分的,或者进行一定的坐标变换,是能够将数据变换到一个线性可分的空间内的.

比如说上图,显然是存在一个椭圆能够将其区分开来.令该椭圆的解析式:1=x21a2+x22b2 .如果将每个点的坐标变换为:z1=x21,z2=x22, 则分离超平面就变为: 1=z1a2+z2b2 .所有数据就映射到如下所示的空间内,并且线性可分.

这里写图片描述

一般而言,用线性分类方法求解非线性可分分类问题的思路如下:

  1. 使用一个变换将原空间内线性不可分数据映射到线性可分的新空间;
  2. 在新空间内用前两章节方法学习一个线性分类模型

3.2 核技巧

核技巧就是完成上诉思路中第一条.核函数定义如下:

设X是输入空间(欧式空间Rn的子集或离散集合),又设ℋ为特征空间(希尔伯特空间),如果存在一个从X到ℋ的映射:

ϕ(x): X→ℋ

使得对所有x,z∈X,函数K(x,z)满足:
K(x,z)=ϕ(x)Tϕ(z)

则称K(x,z)为核函数,其中ϕ(x)是映射函数.

实际使用中,直接计算核函数是比较容易的,但是想通过映射函数来计算核函数就比较难.并且,给定一个核函数,可能存在多组映射函数和特征空间与之对应.

3.3 对偶问题

由第二章最终的结果可以看到,其中想直接利用核函数是非常困难的.

minω,b12||ω||2+CNi=1ξi

s.t.
yi(ωTxi+b)1ξi

ξi0,i=1,2,...,N,

从上面的式子中我们是看不到有什么核函数的影子.所以下面我们需要引入该问题的对偶问题.为每一个不等式引入一个拉格朗日参数αi0,i=1,2,...,N ,一共有N个不等式,则引入N个参数.则上式变换为:

L(ω,b,ξi,αi,μi)
=12||ω||2+CNi=1ξi[Ni=1yi(ωTxi+b)αiNi=1(1ξi)αi]Ni1μiξi

原问题就变换为求上式中αi,μi0,i=1,2,,N 最大时,拉格朗日函数 L(ω,b,ξi,αi,μi) 的最小值的问题.即

maxαi,μiminω,b,ξiL(ω,b,ξi,αi,μi)

我们首先求朗日函数L(ω,b,ξi,αi,μi)的极值点,分别对ω,b求偏导数,并令其等于0:

Lω=ωNi=1(yixiαi)=0

Lb=Ni=1(yiαi)=0

Lξi=Cαiμi=0

则,我们可以等到三个等式关系.

ω=Ni=1(yixiαi)

0=Ni=1(yiαi)

0=Cαiμi

注意到一点, ω的向量二范数的平方ω2实际上就是 ωTω,而上诉等式中,只有xi是与ω同维度的向量, yi,αi均是标量,即数值.则

ωT=Ni=1(yixTiαi)

ωTω=(Ni=1yixTiαi)(Nj=1yjxjαj)
=Ni=1Nj=1yiyjαiαj(xTixj)

Ni=1yi(ωTxi+b)αi
=Ni=1yi(Nj=1yjxTjαjxi+b)αi
=Ni=1Nj=1[yiyjαjαi(xTjxi)]+Ni=1yiαi =ωTω+0=ωTω

由上:

L(ω,b,ξi,αi,μi)
=12||ω||2+CNi=1ξi[Ni=1yi(ωTxi+b)αiNi=1(1ξi)αi]Ni1μiξi
=12ωTω+CNi=1ξi[ωTωNi=1(1ξi)αi]Ni=1μiξi
=12ωTω+CNi=1ξi+Ni=1(1ξi)αiNi=1μiξi

由:

C=αi+μi

可得:

CNi=1ξi+Ni=1(1ξi)αiNi=1μiξi
=αiNi=1ξi+μiNi=1ξi+Ni=1αiNi=1ξiαiNi=1μiξi
=Ni=1αi

则:

L(ω,b,ξi,αi,μi)
=12ωTω+Ni=1αi

由上诉推导可知,原问题:

minω,b12||ω||2+CNi=1ξi

s.t.
yi(ωTxi+b)1ξi

ξi0,i=1,2,...,N,

等价于:

maxαi,μiL(ω,b,ξi,αi,μi)

s.t.

Ni=1yiαi=0

C=αi+μi

αi,μi0,i=1,2,...,N

上诉最优化问题还能继续化简:

minαi12Ni=1Nj=1[αiαjyiyj(xTjxi)]Ni=1αi

s.t.

Ni=1yiαi=0

0αiC,i=1,2,...,N

上诉最优化问题即为原问题的对偶问题.显然,其中αi是有最优解的.

假设α=(α1,α2,...,αN)是上述最优化问题的一组最优解,则原始问题的ω,b可按下述公式求得.

ω=Ni=1yixiαi

b=yjNi=1[yiαi(xTixj)]

带入到分类决策函数即可得到最终SVM的分类决策函数.

3.4 核技巧的运用

由上式对偶最优化问题可以看到,其中最大的一个特色是,其数据的特征向量均是已内积的形式出现.如果存在一个映射函数ϕ(x): X→ℋ,将原空间映射到一个新的空间来.则,上诉最优化问题又可转换为:

minαi12Ni=1Nj=1[αiαjyiyj(ϕ(xj)Tϕ(xi))]Ni=1αi
=minαi12Ni=1Nj=1[αiαjyiyjK(xi,xj)]Ni=1αi

其中K(x_i,x_j)是核函数.假设最优解α=(α1,α2,...,αN),则:

分离超平面:

0=Ni=1[yiαiK(xi,x)]+b

分类决策函数:

f(x)=sign(Ni=1[yiαiK(xi,x)]+b)

其中, b=yjNi=1[yiαi(xTixj)]

前述中提到”直接计算核函数是比较容易的,但是想通过映射函数来计算核函数就比较难.”,则通过对偶问题来求解,就很好的避开了通过映射函数求解核函数的问题.直接将核函数带入到上诉最优化问题,然后对其求最优解即可.

3.5 常用核函数

常用的核函数总结如下:

  1. 线性核函数(liner kernel function)
    K(xi,xj)=xixj
  2. 多项式核函数(polynomial kernel function)
    K(xi,xj)=(xixj+b)p
  3. 高斯核函数(Gaussian Kernel function),即径向基核函数(RBF)
    K(xi,xj)=exp(||xixj||22σ2)
  4. sigmoid
    K(xi,xj)=tanh(σ(xixj)+b)

第四章 实现

OpenCV中有SVM的实现,熟悉OpenCV的朋友应该知道.另外,在很多地方比较常用的库还有LibSVM和LibLinear这两个.比如说,BING源代码中,使用用于训练与预测的SVM库就是LibLinear.LibSVM也是一个非常牛逼的SVM库.运用也非常得多.这些在作者网站上都能够免费下载得到.

LibSVM下载: http://download.csdn.net/detail/sunbibei/9172479
LibLinear官网: http://www.csie.ntu.edu.tw/~cjlin/liblinear/

2 0
原创粉丝点击