支持向量机SVM

简介

支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。由简至繁的模型包括:

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;
  • 当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机;
  • 当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机;

线性可分支持向量机

给定训练样本集D=(x1,y1),(x2,y2),⋯,(xm,ym),其中yi∈{−1,+1},分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开。
支持向量机SVM
能将训练样本分开的划分超平面有很多,但应该去找位于两类训练样本“正中间”的划分超平面,即图6.1中红色的那条,因为该划分超平面对训练样本局部扰动的“容忍”性最好,例如,由于训练集的局限性或者噪声的因素,训练集外的样本可能比图6.1中的训练样本更接近两个类的分隔界,这将使许多划分超平面出现错误。而红色超平面的影响最小,简言之,这个划分超平面所产生的结果是鲁棒性的。

线性可分
​如果一个线性函数能够将样本分开,称这些数据样本是线性可分的。那么什么是线性函数呢?其实很简单,在二维空间中就是一条直线,在三维空间中就是一个平面,以此类推,如果不考虑空间维数,这样的线性函数统称为超平面。我们看一个简单的二维空间的例子,O代表正类,X代表负类,样本是线性可分的,但是很显然不只有这一条直线可以将样本分开,而是有无数条,我们所说的线性可分支持向量机就对应着能将数据正确划分并且间隔最大的直线。
支持向量机SVM
要间隔最大的原因:一般来说,一个点距离分离超平面的远近可以表示分类预测的确信度,如图中的A B两个样本点,B点被预测为正类的确信度要大于A点,所以SVM的目标是寻找一个超平面,使得离超平面较近的异类点之间能有更大的间隔,即不必考虑所有样本点,只需让求得的超平面使得离它近的点间隔最大。

接下来考虑第二个问题,怎么计算间隔?只有计算出了间隔,才能使得间隔最大化。在样本空间中,划分超平面可通过如下线性方程来描述:

WTx+b=0W^Tx+b=0

其中w为法向量,决定了超平面的方向,b为位移量,决定了超平面与原点的距离。假设超平面能将训练样本正确地分类,即对于训练样本(xi,yi),满足以下公式:

{WTxi+b+1yi=+1WTxi+b1yi=1\begin{cases} W^Tx_i+b \geq +1& y_i= +1 \\ W^Tx_i+b \leq -1& y_i= -1 \end{cases}

该公式被称为最大间隔假设,yi=+1 表示样本为正样本,yi=−1 表示样本为负样本,式子前面选择大于等于+1,小于等于-1只是为了计算方便,原则上可以是任意常数,但无论是多少,都可以通过对 w 的变换使其为 +1 和 -1 。实际上该公式等价于yi(WTxi+b)+1y_i(W^Tx_i+b) \geq +1

如图6.2所示,距离超平面最近的这几个样本点满足yi(WTxi+b)=1y_i(W^Tx_i+b) = 1,它们被称为“支持向量”。虚线称为边界,两条虚线间的距离称为间隔(margin)。
支持向量机SVM
关于间隔的计算:它就等于两个异类支持向量的差在 W方向上的投影 ,W方向是指图6.2所示实线的法线方向。

即:{1(WTxi+b)=1yi=+11(WTxi+b)=1yi=1\begin{cases} 1*(W^Tx_i+b) = 1& y_i= +1 \\ -1*( W^Tx_i+b) = 1& y_i= -1 \end{cases}

可以推出:{WTx+=1byi=+1WTx=1byi=1\begin{cases} W^Tx_+= 1-b& y_i= +1 \\ W^Tx_- =-1-b& y_i= -1 \end{cases}

因此有γ=x+xWTW=1b+1+bW=2W\gamma=\frac{(\overrightarrow x_+-\overrightarrow x_-)\overrightarrow W^T}{||W||}=\frac{1-b+1+b}{||W||}=\frac{2}{||W||}

至此,求得了间隔,SVM的思想是使得间隔最大化,也就是

max2W\max\frac{2}{||W||}
s.t.yi(WTxi+b)+1s.t. {y_i}(W^Tx_i+b) \geq +1

显然,max2W\max\frac{2}{||W||}相当于minW\min||W||,为了计算方便,将公式转化成如下公式,它即为支持向量机的基本型:

min12W2\min\frac {1}{2}||W||^2
s.t.yi(WTxi+b)+1s.t. {y_i}(W^Tx_i+b) \geq +1

该基本型是一个凸二次规划问题,可以采用拉格朗日乘子法对其对偶问题求解求解,拉格朗日函数:

L(w,b,α)=12W2+i=1mαi(1yi(WTxi+b))L(w,b,\alpha)=\frac {1}{2}||W||^2+\sum_{i=1}^{m}\alpha_i(1-y_i(W^Tx_i+b))

对W,b求导可得;
支持向量机SVM
令其分别为0,可得:
支持向量机SVM
将其带入拉格朗日函数中,可得:
支持向量机SVM
原问题就转换为如下关于a的问题:
支持向量机SVM
解出 α 之后,根据公式(9)可以求得 w , 进而求得 b,可以得到模型:
支持向量机SVM
该过程的KTT条件为:
支持向量机SVM
分析一下,对于任意的训练样本 (xi,yi):
1、若 αi=0,则其不会在公式(13)中的求和项中出现,也就是说,它不影响模型的训练;
2、若 αi>0,则yif(xi)1=0y_if(x_i)−1=0,也就是 yif(xi)=1y_if(x_i)=1,即该样本一定在边界上,是一个支持向量。
这里显示出了支持向量机的重要特征:当训练完成后,大部分样本都不需要保留,最终模型只与支持向量有关。

非线性支持向量机和核函数

对于非线性问题,线性可分支持向量机并不能有效解决,要使用非线性模型才能很好地分类。先看一个例子,如下图,很显然使用直线并不能将两类样本分开,但是可以使用一条椭圆曲线(非线性模型)将它们分开。非线性问题往往不好求解,所以希望能用解线性分类问题的方法求解,因此可以采用非线性变换,将非线性问题变换成线性问题。
支持向量机SVM
对于这样的问题,可以将训练样本从原始空间映射到一个更高维的空间,使得样本在这个空间中线性可分,如果原始空间维数是有限的,即属性是有限的,那么一定存在一个高维特征空间使样本可分。令ϕ(x)表示将 x 映射后的特征向量,于是在特征空间中,划分超平面所对应的的模型可表示为:f(x)=wTϕ(x)+bf(x)=w^Tϕ(x)+b

于是有最小化函数:
支持向量机SVM
其对偶问题为:
支持向量机SVM

若要对公式(16)求解,会涉及到计算ϕ(xi)Tϕ(xj)ϕ(x_i)^Tϕ(x_j),这是样本xix_ixjx_j映射到特征空间之后的内积,由于特征空间的维数可能很高,甚至是无穷维,因此直接计算ϕ(xi)Tϕ(xj)ϕ(x_i)^Tϕ(x_j)通常是困难的,于是使用这样一个函数:
支持向量机SVM
xix_ixjx_j在特征空间中的内积等于他们在原始样本空间中通过函数κ(xi,xj)κ(x_i,x_j)计算的函数值,于是公式(16)写成如下:
支持向量机SVM
求解后得到:
支持向量机SVM
这里的函数κ(xi,xj)κ(x_i,x_j)就是核函数,在实际应用中,通常人们会从一些常用的核函数里选择(根据样本数据的不同,选择不同的参数,实际上就得到了不同的核函数)
支持向量机SVM

线性支持向量机(软间隔支持向量机)与松弛变量

在前面的讨论中,我们假设训练样本在样本空间或者特征空间中是线性可分的,但在现实任务中往往很难确定合适的核函数使训练集在特征空间中线性可分,退一步说,即使瞧好找到了这样的核函数使得样本在特征空间中线性可分,也很难判断是不是由于过拟合造成。

线性不可分意味着某些样本点 (xi,yi)(x_i,y_i)不能满足间隔大于等于1的条件,样本点落在超平面与边界之间。为解决这一问题,可以对每个样本点引入一个松弛变量 ξi≥0,使得间隔加上松弛变量大于等于1,这样约束条件变为:
支持向量机SVM
同时,对于每一个松弛变量ξi0ξ_i≥0,支付一个代价ξi0ξ_i≥0,目标函数变为:
支持向量机SVM
其中 C>0为惩罚参数,C值大时对误分类的惩罚增大, C值小时对误分类的惩罚减小,公式(21)包含两层含义:使W22\frac{||W||^2}{2}尽量小即间隔尽量大,同时使误分类点的个数尽量小,C是调和两者的系数。 有了公式(21),可以和线性可分支持向量机一样考虑线性支持向量机的学习过程,此时,线性支持向量机的学习问题变成如下凸二次规划问题的求解(原始问题):
支持向量机SVM
其对偶问题,与线性可分支持向量机的对偶问题解法一致,公式(22)的拉格朗日函数为:
支持向量机SVM其中 αi0,μi0αi≥0,μi≥0是拉格朗日乘子。

L(w,b,α,ξ,μ)L(w,b,α,ξ,μ)w,b,ξw,b,ξ的偏导数为0可得如下:
支持向量机SVM
将公式(24)(25)(26)代入公式(23)得对偶问题:
支持向量机SVM
上述过程的KTT条件如下:
支持向量机SVM
我们分析一下,对于任意的训练样本(xi,yi)(x_i,y_i),总有αi=0α_i=0或者yif(xi)1+ξi=0y_if(x_i)−1+ξ_i=0

  • αi=0αi=0,则该样本不出现在公式(13)中,不影响模型。
  • αi>0αi>0,必有yif(xi)1+ξi=0y_if(x_i)−1+ξ_i=0,即yif(xi)=1ξiy_if(x_i)=1−ξ_i,此时该样本为支持向量。

由于C=αi+μiC=α_i+μ_i ——公式(26)
(1)若αi<Cα_i<C, 则必有μi>0μ_i>0,根据公式(28)知ξi=0ξ_i=0,即该样本恰好落在最大间隔的边界上;

(2)若 αi=Cα_i=C,则μi=0μ_i=0,此时若 ξi1ξ_i≤1 则该样本在最大间隔内部,若 ξi>1ξ_i>1 则样本分类错误。

支持向量机SVM的两个超参数

SVM模型有两个非常重要的参数C与gamma。其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差

gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。

RBF公式里面的sigma和gamma的关系: γ=12σ2\gamma=\frac{1}{2\sigma^2}

gamma的物理意义,是的RBF的幅宽,它会影响每个支持向量对应的高斯的作用范围,从而影响泛化性能。如果γ\gamma设的太大,σ\sigma会很小,σ\sigma很小的高斯分布(正态分布)长得又高又瘦, 会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高,(如果让无穷小,则理论上,高斯核的SVM可以拟合任何非线性数据,但容易过拟合)而测试准确率不高的可能,就是通常说的过拟合;而如果设的过小,则会造成平滑效应太大,无法在训练集上得到特别高的准确率,也会影响测试集的准确率。

1、样本数目少于特征维度并不一定会导致过拟合(用RBF kernel, 系统的维度(尺寸)实际上不超过样本数,与特征维数没有一个精巧(特别相关)的关系)

2、RBF核应该可以得到与线性核相近的效果(按照理论,RBF核可以模拟线性核),可能好于线性核,也可能差于,但是,不应该相差太多。当然,很多问题中,比如维度过高,或者样本海量的情况下,更倾向于用线性核,因为效果相当,但是在速度和模型大小方面,线性核会有更好的表现。

Grid Search是用在SVM中的参数搜索方法。很容易理解:就是在C,gamma组成的二维参数矩阵中,依次实验每一对参数的效果。

参考