SVM

基本概念

支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。
一般SVM有下面三种:

  • 硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机,即分割过程中不允许犯错。

    SVM

  • 软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机,允许犯错,过渡带之间存在样本。

    SVM

  • 非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机。

    SVM

硬间隔支持向量机

给定训练样本集D={(x1,y1),(x2,y2),,(xn,yn)}D=\{(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)\}yi{+1,1}y_i\in\{+1,-1\}ii表示第ii个样本,nn表示样本容量。分类学习最基本的想法就是基于训练集DD在特征空间中找到一个最佳划分超平面将正负样本分开,而SVM算法解决的就是如何找到最佳超平面的问题。超平面可通过如下的线性方程来描述:

wTΦ(x)+b=0(1)w^T\Phi(x)+b=0\tag{1}

其中w\vec{w}表示法向量,决定了超平面的方向;bb表示偏移量,决定了超平面与原点之间的距离,Φ(x)\Phi(\vec{x})是某个确定的特征空间转换函数,作用是将X映射到更高的维度,最简单的的情况为:Φ(x)=x\Phi(\vec{x})=\vec{x}

对于训练数据集DD假设找到了最佳超平面wΦ(x)+b=0w^*\Phi(x)+b^*=0,定义决策分类函数

f(x)=sign(wΦ(x)+b)(2)f(\vec{x})=sign(w^*\Phi(x)+b^*)\tag{2}

该分类决策函数也称为线性可分支持向量机。
在测试时对于线性可分支持向量机可以用支持向量离划分超平面的距离来表示分类预测的可靠程度,如果支持向量离划分超平面越远,则对该样本的分类越可靠,反之就不那么可靠。
那么,什么样的划分超平面是最佳超平面呢?
对于图1有A、B、C三个超平面,很明显应该选择超平面B,也就是说超平面首先应该能满足将两类样本点分开。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MxwhUYLh-1583379945732)(assets/1579420937189-1580286053510.png)]

图1
对于图2的A、B、C三个超平面,应该选择超平面C,因为使用超平面C进行划分对支持向量局部扰动的“容忍”度最好,分类的鲁棒性最强,对未见样本的泛化能力最强。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPyGfGWi-1583379945733)(assets/1579421036754-1580286065050.png)]

图2
下面以图3中示例进行推导得出最佳超平面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7E47sfN-1583379945733)(assets/1579421089967-1580286075341.png)]

图3
空间中超平面可记为$(w,b)$,根据点到平面的距离公式,空间中任意点$\vec{x}$到超平面$(\vec{w},b)$的距离可写为:

r=wΦ(x)+bw(3)r=\frac{w\Phi(x)+b}{||w||}\tag{3}

假设超平面(w,b)(w,b)能将训练样本正确分类,那么对于正样本一侧的任意一个样本(xi,yi)D(x_i,y_i)\in{D},需要满足,即wΦ(x)+b>0w\Phi(x)+b>0 。在训练的时候我们要求限制条件更严格点,以使最终得到的分类器更健壮,所以我们要求wTΦ(xi)+b>1w^T\Phi(x_i)+b>1。也可以写为大于其它距离,但都可以通过同比例缩放wwbb来使得使其变为1,因此为计算方便这里直接选择1。同样对于负样本应该有wTΦ(xi)+b<1w^T\Phi(x_i)+b<-1yi=1y_i=-1。即:
{wTΦ(xi)+b+1,yi=+1wTΦ(xi)+b1,yi=1(4)\begin{cases} w^T\Phi(x_i)+b\geq+1, & y_i=+1 \\ w^T\Phi(x_i)+b\leq-1, & y_i=-1 \end{cases}\tag{4}

亦即:

yi(wT(xi)+b)+1(5)y_i(w^T(x_i)+b)\geq+1\tag{5}

SVM

所以我们就完成了由求距离的问题到优化问题的转变

SVM

为了方便计算,简单的做一下变换

SVM

拉格朗日对偶问题

该求解问题本身是一个凸优化问题,可以通过开源的优化计算包进行求解,但是这样就无法体现SVM的精髓,我们可以将该凸优化问题通过拉格朗日对偶性来解决。在约束条件下求极值的问题使用拉格朗日乘子法,对每条约束添加拉格朗日乘子αi0\color{red}{\alpha_i}\geq0,则该问题的拉格朗日函数可写为:

L(w,b,α)=12w2i=1nαi(yi(wTxi+b)1)(6)L(w,b,\alpha)=\frac{1}{2}||w||^2-\sum_{i=1}^{n}{\alpha_i(y_i(w^Tx_i+b)-1)}\tag{6}

其中α=(α1,α2,,αn)\vec{\alpha}=(\alpha_1,\alpha_2,\dots,\alpha_n)分别是对应着各个样本的拉格朗日乘子,然后进行对偶化。

SVM

L(w,b,α)L(w,b,\alpha)wwbb求偏导并将偏导数等于零可得:

{w=i=1nαiyiΦ(xi)0=i=1nαiyi(7)\begin{cases} \vec{w}=\sum_{i=1}^{n}{\alpha_iy_i\Phi(x_i)}\\ 0 = \sum_{i=1}^{n}{\alpha_iy_i} \end{cases}\tag{7}

然后将上述式子代入拉格朗日方程可得α\alpha的表达式

SVM

以上过程用一张手写图可概括为:

SVM

KKT条件

α\alpha的表达式中有不等式约束,因此上述过程满足Karush-Kuhn-Tucker(KKT)条件:

SVM

对于任意样本(xi,yi)(\vec{x_i},y_i)总有αi=0\alpha_i=0yi(wTx+b)1=0y_i(\vec{w}^T\vec{x}+b)-1=0。如果αi=0\alpha_i=0则该样本点对求解最佳超平面没有任何影响。当αi>0\alpha_i>0时必有yi(wTx+b)1=0y_i(\vec{w}^T\vec{x}+b)-1=0,表明对应的样本点在最大间隔边界上,即对应着支持向量。也由此得出了SVM的一个重要性质:训练完成之后,大部分的训练样本都不需要保留,最终的模型仅与支持向量有关

那么接下来我们重点关注支持向量,即上图中画圈的式子始终成立,所以我们可以代入之前求出的w,来算出b的表达式,过程如下:

SVM

求解出wwbb之后就可利用

f(x)=sign(wTΦ(x)+b)(8)f(x)=sign(w^T\Phi(x)+b)\tag{8}

进行预测分类了。

示例

SVM

SVM

SVM

软间隔支持向量机

在现实任务中很难找到一个超平面将不同类别的样本完全划分开,即很难找到合适的核函数使得训练样本在特征空间中线性可分。退一步说,即使找到了一个可以使训练集在特征空间中完全分开的核函数,也很难确定这个线性可分的结果是不是由于过拟合导致的。解决该问题的办法是在一定程度上运行SVM在一些样本上出错,为此引入了“软间隔”(soft margin)的概念

SVM

具体来说,硬间隔支持向量机要求所有的样本均被最佳超平面正确划分,而软间隔支持向量机允许某些样本点不满足间隔大于等于1的条件yi(wxi+b)1y_i(\vec{w}\vec{x_i}+b)\geq1,当然在最大化间隔的时候也要限制不满足间隔大于等于1的样本的个数使之尽可能的少。于是我们引入一个惩罚系数C>0C>0,类似于正则化,并对每个样本点(xi,yi)(\vec{x_i},y_i)引入一个松弛变量(slack variables)ξ0\xi\geq0,此时可将硬间隔的目标函数改写为

{minw,b(12w2+Ci=1nξi)s.t.yi(wTxi+b)1ξi,i=1,2,,nξi0(9)\begin{cases} \min_{\vec{w},b}(\frac{1}{2}||\vec{w}||^2+C\sum_{i=1}^{n}\xi_i) \\ s.t.\quad y_i(\vec{w}^T\vec{x_i}+b)\geq1-\xi_i \quad ,i=1,2,\dots,n\\ \quad\quad \xi_i\geq0 \end{cases}\tag{9}

上式中约束条件改为yi(wxi+b)1ξiy_i(\vec{w}\vec{x_i}+b)\geq1-\xi_i,表示间隔加上松弛变量大于等于1;优化目标改为minw,b(12w2+Ci=1nξi)\min_{\vec{w},b}(\frac{1}{2}||\vec{w}||^2+C\sum_{i=1}^{n}\xi_i)表示对每个松弛变量都要有一个代价损失CξiC\xi_iCC越大对误分类的惩罚越大、使分类的正确率越高,落至间隔带的数据减小。
式(9)是软间隔支持向量机的原始问题。可以证明w\vec{w}的解是唯一的,bb的解不是唯一的,bb的解是在一个区间内。假设求解软间隔支持向量机间隔最大化问题得到的最佳超平面是wx+b=0\vec{w^*}\vec{x}+b^*=0,对应的分类决策函数为

f(x)=sign(wx+b)(10)f(\vec{x})=sign(\vec{w^*}\vec{x}+b^*)\tag{10}

f(x)f(\vec{x})称为软间隔支持向量机。
利用拉格朗日乘子法可得到(9)式的拉格朗日函数

L(w,b,α,ξ,μ)=12w2+Ci=1nξii=1nαi(yi(wTxi+b)1+ξi)i=1nμiξi(11)L(\vec{w},b,\vec{\alpha},\vec{\xi},\vec{\mu})=\frac{1}{2}||\vec{w}||^2+C\sum_{i=1}^{n}\xi_i-\sum_{i=1}^{n}\alpha_i(y_i(\vec{w}^T\vec{x_i}+b)-1+\xi_i)-\sum_{i=1}^{n}\mu_i\xi_i\tag{11}

其中αi0\alpha_i\geq0μi0\mu_i\geq0是拉格朗日乘子。
L(w,b,α,ξ,μ)L(\vec{w},b,\vec{\alpha},\vec{\xi},\vec{\mu})分别对w\vec{w}bbξ\vec{\xi}求偏导并将偏导数为零可得:

{w=i=1nαiyixii=1nαiyi=0C=αi+μi(12)\begin{cases} \vec{w}=\sum_{i=1}^{n}\alpha_iy_i\vec{x_i}\\ \sum_{i=1}^{n}\alpha_iy_i=0\\ C=\alpha_i+\mu_i \end{cases}\tag{12}

将式(12)带入式(11)然后求关于α\alpha的极大值可得:

{maxαi=1nαi12i=1nj=1nαiαjyiyjxiTxjs.t.i=1nαiyi=0,i=1,2,,n0αiC(13)\begin{cases} \max_{\vec\alpha}\sum_{i=1}^{n}\alpha_i-\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_jy_iy_j\vec{x_i}^T\vec{x_j}\\ s.t. \quad\quad\sum_{i=1}^{n}\alpha_iy_i=0\quad\quad,i=1,2,\dots,n\\ \quad\quad\quad 0\leq\alpha_i\leq C \end{cases}\tag{13}

对比软间隔支持向量机的对偶问题和硬间隔支持向量机的对偶问题可发现__二者的唯一差别就在于对偶变量的约束不同__,软间隔支持向量机对对偶变量的约束是0αiC0 \leq \alpha_i \leq C,硬间隔支持向量机对对偶变量的约束是0αi0\leq\alpha_i,于是可采用和硬间隔支持向量机相同的解法求解式(13)。类似硬间隔的方法,对于软间隔支持向量机,KKT条件要求:

{αi0,μi0yi(wx+b)1+ξi0αi(yi(wx+b)1+ξi)=0ξi0,μiξi=0(14)\begin{cases} \alpha_i\geq0,\mu_i\geq0\\ y_i(\vec{w}\vec{x}+b)-1+\xi_i\geq0\\ \alpha_i(y_i(\vec{w}\vec{x}+b)-1+\xi_i)=0\\ \xi_i\geq0,\mu_i\xi_i=0 \end{cases}\tag{14}

同硬间隔支持向量机类似,对任意训练样本(xi,yi)(\vec{x_i},y_i),总有αi=0\alpha_i=0yi(wx+b1+ξi)=0y_i(\vec{w}\vec{x}+b-1+\xi_i)=0,若αi=0\alpha_i=0,则该样本不会对最佳决策面有任何影响;若αi>0\alpha_i>0则必有yi(wx+b)=1ξiy_i(\vec{w}\vec{x}+b)=1-\xi_i,也就是说该样本是支持向量。由式(12)可知若αi<C\alpha_i<Cμi>0\mu_i>0进而有ξi=0\xi_i=0,即该样本处在正常范围内,即没有落在间隔带,也没有分类错误;若αi=C\alpha_i=Cμi=0\mu_i=0此时如果xii1xi_i\leq1则该样本处于最大间隔内部,即间隔带上;如果ξi>1\xi_i>1则该样本处于最大间隔外部即被分错了。由此也可看出,软间隔支持向量机的最终模型仅与支持向量有关。

损失函数分析

SVM

非线性支持向量机

现实任务中原始的样本空间DD中很可能并不存在一个能正确划分两类样本的超平面。例如图4中所示的问题就无法找到一个超平面将两类样本进行很好的划分。
对于这样的问题可以通过将样本从原始空间映射到特征空间使得样本在映射后的特征空间里线性可分。例如对图5做特征映射z=x2+y2z=x^2+y^2可得到如图6所示的样本分布,这样就很好进行线性划分了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D9rJSXjk-1583379945736)(assets/1579428403295-1580286095597.png)]

图5
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJ9r4git-1583379945736)(assets/1579428429980.png)]
图6
![](https://imgconvert.****img.cn/aHR0cDovL2V4YW1wbGUueHVjb29sZXIudG9wLzE1Nzk0MzA4NzI5OTYucG5n?x-oss-process=image/format,png)

ϕ(x)\phi(\vec{x})表示将样本点x\vec{x}映射后的特征向量,类似于线性可分支持向量机中的表示方法,在特征空间中划分超平面所对应的模型可表示为

f(x)=wTΦ(x)+b(15)f(\vec{x})=\vec{w}^T\Phi(x)+b\tag{15}

其中w\vec{w}bb是待求解的模型参数。问题转换后变成:

{minw,b12w2s.t.yi(wTϕ(x)+b)1,i=1,2,,n(16)\begin{cases} \min_{\vec{w},b}\frac{1}{2}||\vec{w}||^2\\ s.t. \quad y_i(\vec{w}^T\phi(\vec{x})+b)\geq1\quad,i=1,2,\dots,n \end{cases}\tag{16}

其拉格朗日对偶问题是

{maxαi=1nαi12i=1nj=1nαiαjyiyjϕ(xiT)ϕ(xj)s.t.αi0,i=1,2,,ni=1nαiyi=0(17)\begin{cases} \max_\alpha{\sum_{i=1}^{n}\alpha_i-\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_jy_iy_j\phi(\vec{x_i}^T)\phi(\vec{x_j})}\\ s.t.\quad \alpha_i\geq0\quad\quad\quad,i=1,2,\dots,n \\ \quad\quad\quad \sum_{i=1}^{n}\alpha_iy_i=0 \end{cases}\tag{17}

求解(17)需要计算ϕ(xiT)ϕ(xj)\phi(\vec{x_i}^T)\phi(\vec{x_j}),即样本映射到特征空间之后的内积,由于特征空间可能维度很高,甚至可能是无穷维,因此直接计算ϕ(xiT)ϕ(xj)\phi(\vec{x_i}^T)\phi(\vec{x_j})通常是很困难的,而且其实我们根本不关心单个样本的表现,只关心特征空间中样本间两两的乘积,因此我们没有必要把原始空间的样本一个个地映射到特征空间中,只需要想法办求解出样本对应到特征空间中样本间两两的乘积即可。为了解决该问题可设想存在核函数:

κ(xi,xj)=ϕ(xiT)ϕ(xj)(18)\kappa(\vec{x_i},\vec{x_j})=\phi(\vec{x_i}^T)\phi(\vec{x_j})\tag{18}

也就是说xi\vec{x_i}xj\vec{x_j}在特征空间的内积等于它们在原始空间中通过函数κ()\kappa()计算的结果,这给求解带来很大的方便。于是式(17)可写为:

{maxαi=1nαi12i=1nj=1nαiαjyiyjκ(xi,xj)s.t.αi0,i=1,2,,ni=1nαiyi=0(19)\begin{cases} \max_\alpha{\sum_{i=1}^{n}\alpha_i-\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_jy_iy_j\kappa(\vec{x_i},\vec{x_j})}\\ s.t.\quad \alpha_i\geq0\quad\quad\quad,i=1,2,\dots,n \\ \quad\quad\quad \sum_{i=1}^{n}\alpha_iy_i=0 \end{cases}\tag{19}

同样的我们只关心在高维空间中样本之间两两点乘的结果而不关心样本是如何变换到高维空间中去的。求解后即可得到

f(x)=wTϕ(x)+b=i=1nαiyiϕ(x)Tϕ(x)+b=i=1nαiyiκ(xi,xj)+b(20)f(\vec{x})=\vec{w}^T\phi(\vec{x})+b\\ =\sum_{i=1}^{n}\alpha_iy_i\phi(\vec{x})^T\phi(\vec{x})+b\\ =\sum_{i=1}^{n}\alpha_iy_i\kappa(\vec{x_i},\vec{x_j})+b\tag{20}

剩余的问题同样是求解αi\alpha_i,然后求解w\vec{w}bb即可得到最佳超平面。

常用核函数

名称 表达式 参数
线性核 κ(xi,xj)=xiTxj\kappa(\vec{x_i},\vec{x_j})=\vec{x_i}^T\vec{x_j}
多项式核 κ(xi,xj)=(xiTxj)n\kappa(\vec{x_i},\vec{x_j})=(\vec{x_i}^T\vec{x_j})^n n1n\geq1为多项式的次数
高斯核(RBF) κ(xi,xj)=exp(xixj22σ2)\kappa(\vec{x_i},\vec{x_j})=exp(-\frac{\|\vec{x_i}-\vec{x_j}\|^2}{2\sigma^2}) σ>0\sigma>0为高斯核的带宽
拉普拉斯核 κ(xi,xj)=exp(xixjσ)\kappa(\vec{x_i},\vec{x_j})=exp(-\frac{\|x_i-x_j\|}{\sigma}) σ\sigma>0
Sigmoid核 κ(xi,xj)=tanh(βxiTxj+θ)\kappa(\vec{x_i},\vec{x_j})=tanh(\beta\vec{x_i}^T\vec{x_j}+\theta) thah​为双曲正切函数

SVM的优缺点

优点:
SVM在中小量样本规模的时候容易得到数据和特征之间的非线性关系,可以避免使用神经网络结构选择和局部极小值问题,可解释性强,可以解决高维问题。
缺点:
SVM对缺失数据敏感,对非线性问题没有通用的解决方案,核函数的正确选择不容易,计算复杂度高,主流的算法可以达到O(n2)O(n^2)的复杂度,这对大规模的数据是吃不消的。