支持向量机SVM(1)线性可分支持向量机、拉格朗日乘子法、KKT条件、SMO

支持向量机(SVM,Support Vecor Machine)是一种二分类算法,在集成学习和深度学习火起来之前支持向量机的使用非常广泛,其分类效果好、适用性广(线性、非线性都可用),功能真的是很棒棒,下来我们就来梳理一下支持向量机的原理。

1 支持向量机的原理

1)背景

回想一下之前讲过的逻辑回归和感知机,他们的目标都是找到一个将线性可分的数据一分为二的决策超平面:

如上图所示,决策超平面的一侧为正样本,另一侧为负样本,但是我们可以发现,满足这个特性的决策超平面并不是唯一的,在有限的线性可分样本中,正负样本点之间的间隔使得不同的决策超平面存在,那么如果样本点继续增加,这些决策超平面中那个分类效果最好呢?也就是说谁的泛华效果最好呢?——这就是支持向量机要解决的主要问题,也是支持向量机与感知机的主要区别。

2)支持向量

就上面的图来说,主观上看哪个超平面的分类泛化能力最强呢?我们认为红色的那条可能会比较好,这条线距离最近的红点区域和最近的蓝点区域都比较远,无论是红点还是蓝点,再向靠近超平面的方向增加一些点都没问题,还可以被这条超平面分的比较开,那两条虚线就没有这么好的效果,如下图所示,我们新增几个点,可以看出其分类效果的差别:

似乎可以得出这样的结论:超平面离直线两边的数据的间隔越大,对训练集的数据的局限性或噪声有最大的容忍能力,也就是所谓的鲁棒性

所以,如果所有的样本点不只是可以被决策超平面分开,还和超平面保持一定的距离间隔,那么这样的分类超平面是更优的,支持向量机就是要找到使这个间隔最大的决策超平面(即最大化下图中的margin)。训练样本中和这个超平面距离最近的样本点被称为支持向量,如下图虚线所经过的样本点即为支持向量:

3)函数间隔、几何间隔

最大化间隔的思想我们大概了解了,不过要最大化这个间隔首先得量化,怎么量化呢?

支持向量是距离分类超平面最近的样本点,那么样本点距离超平面的距离不就是支持向量与分类超平面的距离吗?在前面的几篇文章中我们也经常提到样本点到超平面的距离的度量,这里我们就稍微详细点说下函数间隔和几何间隔。

函数间隔

在决策超平面𝑤^𝑇𝑥+𝑏=0确定的情况下,|𝑤^𝑇𝑥+𝑏|能够表示点x到超平面的距离远近;𝑤^𝑇𝑥+𝑏y是否同号能够表示分类是否正确,所以可用y(𝑤^𝑇𝑥+𝑏)来表示分类的正确性及确定性,我们在罗辑回归和感知机中就有类似的用法,这就是函数间隔的概念,定义函数间隔𝛾′为:

\gamma^{'} = y(w^Tx + b)

几何间隔

函数间隔虽然可以表示分类的正确性和确定性,但其缺点是只能在一个确定的超平面𝑤^𝑇𝑥+𝑏=0下比较样本点到超平面的相对距离,不同参数的超平面条件下计算的距离是不能比较大小的,比如超平面2𝑤^𝑇𝑥+2𝑏=0𝑤^𝑇𝑥+𝑏=0是同一个超平面,样本点与其真实距离没有变化,但是函数距离却翻了一倍,因此我们需要将参数加以约束,使其具备可比性,我们定义几何间隔:

\gamma = \frac{y(w^Tx + b)}{||w||_2} = \frac{\gamma^{'}}{||w||_2}

可见,几何间隔才是点到超平面的真正距离,上一篇感知机中的损失函数正是几何间隔的形式,我们支持向量机也使用几何间隔来表示支持向量到分类超平面的间隔,如上图中的margin即为两个支持向量与超平面的几何间隔之和\frac{2}{||w||_2}

4)线性可分支持向量机模型

综合上述内容可知,线性可分支持向量机可以表示为:

f(x)=sign(w^*x+b^*)

式中,w^*x+b^*=0为与支持向量间隔最大化的分类超平面,可见与感知机是基本一样的,就多了个间隔最大化的要求。

2 支持向量机模型求解

1)目标函数

通过上述已知,支持向量机是要最大化支持向量与决策超平面之间的几何间隔,所以目标函数为:

\max_{w,b} \;\; \gamma = \frac{y(w^Tx + b)}{||w||_2} \;\; s.t \;\; \frac{y_i(w^Tx_i + b)}{||w||_2} \geq \gamma ,i =1,2,...m

这个式子表示,最大化训练样本与超平面的几何间隔𝛾,同时要保证约束条件每个训练样本与超平面的几何距离不小于𝛾,目标函数可以改写为:

\max_{w,b} \;\; \gamma=\frac{𝛾′}{||w||_2}\;\; s.t \;\; y_i(w^Tx_i + b) \geq 𝛾′ ,i =1,2,...m

一般我们都取函数间隔𝛾′为1,为什么呢,因为𝛾′的取值不影响最优化问题的解,假设𝛾′不为1,就相当于wb变为了𝛾′w𝛾′b,对目标函数和约束不等式都没有影响,都是可以约掉的,所以𝛾′为1完全没问题,此时最优化问题变为:

\max_{w,b} \;\; \frac{1}{||w||_2} \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 ,i =1,2,...m

可以转变为:

\min_{w,b} \;\; \frac{1}{2}||w||_2^2 \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 ,i =1,2,...m

(有的地方说要最大化margin同时保证两类的支持向量到超平面的距离相等,所以有max\frac{2}{||w||_2},个人认为这个解释很牵强,明明优化\gamma的过程中两类就会互相博弈找到这个最优的超平面)根据下面定义的描述发现,这个凸最优化问题是一个凸二次规划问题(convex quadratic programming)。

目标函数和约束条件都为变量的线性函数——线性规划问题;
目标函数为变量的二次函数和约束条件为变量的线性函数——二次规划问题;
目标函数和约束条件都为非线性函数——非线性规划问题。

2)对偶问题转化及求解

在感知机中我们说过,利用对偶问题可以从不同角度看待同一个问题,可能会引入新的参数来帮助我们优化,在约束最优化问题中,常常利用拉格朗日对偶性(Lagrange duality)将原始问题转换为对偶问题,通过解对偶问题得到原始问题的解。

首先我们的优化目标函数可以使用拉格朗日乘子法(详细内容见附录)转变成拉格朗日函数:

L(w,b,\lambda)= \frac{1}{2}||w||_2^2 +\sum_i^m \lambda_i [1-y_i(w^Tx_i + b)], \; \lambda_i\geq0

目标函数的优化转变为:

\min_{w,b}\;\max_{\lambda}\; L(w,b,\lambda)

这一步是什么意思呢,因为约束不等式1-y_i(w^Tx_i + b)\leq 0,\lambda_i\geq 0,所以加号后面整体小于等于0,只有当其取最大值是为0,此时\max_{\lambda}\; L(w,b,\lambda)= \frac{1}{2}||w||_2^2,即为原目标函数,这个变形称为广义拉格朗日函数的极小极大问题,它与原问题是完全等价的,在对偶性中,这个问题被称为原始问题(Primal problem)

这个优化函数满足KKT条件(详细内容见附录),可以实现强对偶,即可以通过拉格朗日对偶(Lagrange duality)将其转化为等价的对偶问题:

\max_{\lambda}\;\min_{w,b}\; L(w,b,\lambda)

所以我们可以先求优化函数极小值对应的wb,再求的极大值对应的拉格朗日乘子系数\lambda

\frac{\partial L}{\partial w} = 0 \;\rightarrow w+\sum_i^m \lambda_iy_ix_i=0 \;\rightarrow w = \sum_{i=1}^{m}\lambda_iy_ix_i

\frac{\partial L}{\partial b} = 0 \;\rightarrow \sum_i^m \lambda_iy_i=0

优化函数取得极小值时,w可以用\lambda,而b无所谓,取什么值都不影响优化函数取得极小值,所以可得:

\begin{align} J(\lambda)&=\min_{w,b}\; L(w,b,\lambda)\\&= \frac{1}{2}||w||_2^2 +\sum_i^m \lambda_i [1-y_i(w^Tx_i + b)]\\ &= \frac{1}{2}w^Tw-\sum_{i=1}^{m}\lambda_iy_iw^Tx_i - \sum_{i=1}^{m}\lambda_iy_ib + \sum_{i=1}^{m}\lambda_i\\ &= \frac{1}{2}\sum_{i=1}^{m}(\lambda_iy_ix_i)^T\sum_{i=1}^{m}\lambda_iy_ix_i-(\lambda_iy_ix_i)^T\sum_{i=1}^{m}\lambda_iy_ix_i- \sum_{i=1}^{m}\lambda_iy_ib + \sum_{i=1}^{m}\lambda_i\\ &=-\frac{1}{2}\sum_{i=1}^{m}(\lambda_iy_ix_i)^T\sum_{i=1}^{m}\lambda_iy_ix_i- b\sum_{i=1}^{m}\lambda_iy_i + \sum_{i=1}^{m}\lambda_i\\ &=-\frac{1}{2}\sum_{i=1}^{m}\lambda_iy_ix_i^T\sum_{i=1}^{m}\lambda_iy_ix_i+ \sum_{i=1}^{m}\lambda_i\\ &=-\frac{1}{2}\sum_{i=1,j=1}^{m}\lambda_iy_ix_i^T\lambda_jy_jx_j+ \sum_{i=1}^{m}\lambda_i \end{align}

J(\lambda)完全是关于参数\lambda的函数,因此:
\max_{\lambda}\;\min_{w,b}\; L(w,b,\lambda)=\max_{\lambda}\;J(\lambda)=\max_{\lambda}\;-\frac{1}{2}\sum_{i=1,j=1}^{m}\lambda_iy_ix_i^T\lambda_jy_jx_j+ \sum_{i=1}^{m}\lambda_i

s.t. \sum_i^m \lambda_iy_i=0,\;\lambda_i\geq0

转化为:

\min_{\lambda}\;\frac{1}{2}\sum_{i=1,j=1}^{m}\lambda_iy_ix_i^T\lambda_jy_jx_j-\sum_{i=1}^{m}\lambda_i

s.t. \sum_i^m \lambda_iy_i=0,\;\lambda_i\geq0

求出上式取得极小值时对应的\lambda向量就可以求出wb了,这里一般需要用到SMO(Sequential Minimal Optimization,序列最小优化算法) 算法,还是比较复杂的,下面来看看怎么做。

3)序列最小优化算法(SMO)

上述最优化问题是要求解m个参数(λ_1,λ_2,λ_3,...,λ_m),其他参数均为已知,有多种算法可以对上述问题求解,比如之前介绍过的次梯度下降应该就可以,但是算法复杂度均很大。序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解两个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。

为什么每次优化两个参数呢?像坐标下降不是每次只优化一个参数吗?因为我们这里有个约束, \sum_i^m \lambda_iy_i=0,如果认为m-1个都是固定值,那么剩下的那个也就确定了,所以选择每次优化两个。因为SMO比较复杂,本篇文章就不细说了,这里先这样提一下SMO,大家知道上面的优化是用SMO计算的就好。

使用SMO算法,我们得到了\max_{λ}\;J(λ)对应的λ^*,所以:

w = \sum_{i=1}^{m}λ_i^*y_ix_i

因为对支持向量有:y_i(w^Tx_i+b)=1,所以要根据这个等式解出b需要将支持向量样本点代入,怎么获得支持向量呢?KKT条件中的对偶互补条件λ_i(y_i(w^Tx_i+b)−1)=0,我们已经求出了λ^*,如果λ_i>0则有y_i(w^Tx_i+b)=1 ,即样本点为支持向量,求解b

y_i^2(w^Tx_i+b)=y_i

b=y_i-w^Tx_i= y_i-\sum_{i=1}^{m}λ_i^*y_ix_i^Tx_i

显然,支持向量大多不止一个,对线性可分支持向量机来说,可以证明分类超平面是存在且唯一的,b的解也就只有一个,此时用不同的支持向量求出来的b都是相同的,如果数据有噪声,并不是完全线性可分的,那么为了增加模型的鲁棒性,b取所有值的平均值,即假设有n个支持向量,则:

b=\frac{1}{n}\sum_i^n (y_i-w^Tx_i)

至此,线性可分支持向量机的模型参数就求出来了,模型也就确定了。

4)线性可分支持向量机算法流程

综合以上全部内容,可以得到线性可分支持向量机的算法流程:

  • 输入:线性可分的样本T=(x_1,y_1),(x_2,y_2),...,(x_m,y_m)xn维特征向量,y\in[+1,-1]
  • 输出:w,b,支持向量机模型f(x)=sign(w^Tx+b)
  1. 确定目标函数:

\min_{\lambda}\;\frac{1}{2}\sum_{i=1,j=1}^{m}\lambda_iy_ix_i^T\lambda_jy_jx_j-\sum_{i=1}^{m}\lambda_i

s.t. \sum_i^m \lambda_iy_i=0,\;\lambda_i\geq0

  1. 使用SMO优化目标函数,得到对应的λ^*
  2. 根据λ^*找到样本中的共k=1个支持向量,计算参数w,b

w^* = \sum_{i=1}^{m}λ_i^*y_ix_i

b^*=\frac{1}{k}\sum_i^k (y_i-w^Tx_i)

  1. 得到支持向量机模型f(x)=sign(w^{*T}x+b^*)

3 线性可分支持向量机小结

线性可分支持向量机假设数据是线性可分的,这点跟感知机、逻辑回归是一样的,就是为了最大化间隔才使得线性可分SVM的理论复杂了这么多,不过对于非线性可分的数据还是没法处理,怎么办呢?我们接下来看一下基于软间隔最大化的线性支持向量机(linear support vector machine)。


附录

1)拉格朗日乘子法

拉格朗日乘子法是一种寻找多元函数在一组约束下的极值的方法,通过引入拉格朗日乘子,可将有d个变量与k个约束条件的优化问题转换为具有d+k个变量的无约束优化问题。这种方法引入了一种新的标量未知数,即拉格朗日乘子:它是约束方程的梯度的线性组合中,每个梯度向量的系数。

(1)无约束条件
我们一般对函数变量求导,令导数等于0的点认为是极值点。

(2)等式约束条件
设目标函数为f(x),约束条件为h_i(x)

min f(x) \;\\ s.t. \;\;h_i(x)=0,\;\;i=1,2,...,n

对于这种形式的优化问题我们一般使用拉格朗日乘子法(Lagrange multiplier),当然也能用消元法,不过太麻烦了,先从几何上理解拉格朗日乘子法(以二维为例),假设要求f(x,y)极值,约束条件h(x,y)=0,函数f(x,y)相当于其在三维坐标系下f(x,y)的等高线,h(x,y)=0是一条曲线,试想如果是等高线与曲线的相交点,说明曲线还可以沿着等高线变大或变小的方向走下去,必然不是极值点,所以约束曲线h(x,y)=0与某一条等高线f(x,y)=a相切时,函数取得极值:

在切点处h(x,y)=0f(x,y)的法向量共线,也就是函数f(x,y)h(x,y)在切点处的梯度平行,有:

\nabla f=λ'\nabla h

因此满足:

\begin{cases} \nabla f+λ\nabla h=0 \\ \\ h(x,y)=0 \end{cases}

即为约束下目标函数的极值点,也可以写成我们常见的:

F(x,y)=f(x,y)+λh(x,y)

因为对其求导并令导数为0可得:

\begin{cases} \frac{\partial F}{\partial (x,y)}=\nabla f+λ\nabla h =0 \\ \\ \frac{\partial F}{\partial λ}=h(x,y)=0 \end{cases}

跟上面的方程组是一样的,这也是从代数上理解拉格朗日乘子法的方式,因此拉格朗日乘子法可以用来求多元函数在一组等式约束下的极值。

(3)不等式约束条件
设目标函数f(x),不等式约束为g(x),等式约束条件h(x)

min f(x) \;\\ s.t. \;\;h_i(x)=0,\;\;i=1,2,...,n \\ \;\;g_j(x)\leq0,\;\;j=1,2,...,m

在不等式约束下,极值点的位置可能有两种情况,一种是极值点被不等式约束包含,如下左图所示;另一种是极值点没有被不等式约束包含,如下右图所示:

对于第一种情况来说,显然满足\nabla f=0即可,对于第二种情况,依然是等高线与不等式的边界相切的点为极值点,可知:

\begin{cases} \nabla f+\mu\nabla h=0 \\ \\ h(x,y)=0 \end{cases}

看起来似乎跟等式约束的一样,其实是有一些区别的,我们知道,等高线在切点处的梯度(也就是切线的法向量)的方向是向着等高线值增大的方向的,对于图示的凸函数来说,就是如图所示向外的,而对于不等式g_j(x)\leq0,其梯度方向必然是相反朝向的,因为梯度要指向增长的方向,肯定会指向g_j(x)>0的方向了:

因此,等式约束的拉格朗日乘子λ没有符号限制,而不等式约束的拉格朗日乘子\mu\geq 0,所以将初始求极值问题转化为:

\begin{cases} \nabla f+\mu\nabla h=0 \\ \\ h(x,y)=0 \\ \\ \mu\geq 0 \end{cases}

可以写成我们常见的:

F(x,y)=f(x,y)+\sum_i^nλ_ih_i(x,y)+\sum_j^m\mu_j g_j(x,y), \;\; \mu_j\geq 0

2)KKT条件

仍然是设目标函数f(x),不等式约束为g(x),等式约束条件h(x)

min f(x) \;\\ s.t. \;\;h_i(x)=0,\;\;i=1,2,...,n \\ \;\;g_j(x)\leq0,\;\;j=1,2,...,m

通过拉格朗日乘子法我们可以将求有约束的函数极值的问题统一转化为求解:

\begin{cases} \nabla f+\sum_i^nλ_i\nabla h_i+\sum_j^m\mu_j \nabla g_j=0 \\ \\ h_i=0,i=1,2,...,n \\ \\ g_j\leq 0,j=1,2,...,m \\ \\ \mu_i\geq 0\\ \\ \mu_j g_j= 0 \end{cases}

这个方程组也就是所谓的KKT条件,前面四项应该都比较好理解,最后一个\mu_j g_j= 0是什么意思呢?在上一节不等式约束中,第一种情况不等式约束相当于不影响极值点,所以\mu_j= 0 , g_j\leq 0,在第二种情况中使用不等式的边界,有\mu_j\geq 0 , g_j= 0



主要参考

《统计学习方法》李航
如何理解拉格朗日乘子法和KKT条件?
如何理解拉格朗日乘子法?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335