线性模型(四)支持向量机(SVM)

16 篇文章 8 订阅
9 篇文章 2 订阅

原始的SVM早在1963年就被发明了,但直到1992年才发明了核方法,使得SVM可以用于非线性分类。

SVM的应用:
handwritten character recognition手写字符识别
face detection 人脸检测
pedestrian detection行人检测
text categorization 文本分类

SVM把训练样本都看作高维空间的点,找一个超平面,使得两类样本尽可能宽地分开。新来的测试样本被映射到同一个空间,看它在hyperlane的哪一侧就能线性二分类。

Note:  p维空间是用p-1维的Hyperlane分隔开的。

SVM,顾名思义,支持向量是对于求解学习模型的关键(实际上SVM最终的模型只和支持向量有关,和其他的数据点向量无关),所以问题求解的复杂度直接和支持向量的个数有关。所以先说两个重点基础概念——margin & support vector。

(一) 间隔和支持向量

SVM(Support Vector Machine)的思想和其他线性模型做2分类一样,都是找个超平面(hyperplan)然后一刀切。但SVM这么成功(在90年代直接造成了NN的第二冬),自然有其独到之处,那就是在超平面的概念上,多引入了“间隔”和"支持向量"的概念。

可实现分类的超平面不唯一,我们怎么选择一个更好的超平面呢?直观上,应该是去找位于两类样本的“正中间”的那个。
在这里插入图片描述
超平面的方程:
w T x + b = 0 w^Tx+b=0 wTx+b=0
w w w是法向量,他的方向与超平面正交,决定超平面的方向 ;
b是位移项,决定超平面和原点的距离。
这俩参数完全决定了超平面,所以就直接把超平面记为 ( w , b ) (w,b) w,b
(实际上最小二乘回归,逻辑回归好不容易求解出来的线性模型也是个超平面,LDA最后求出来的是个过原点的超平面,b=0)

超平面建模完毕,那么空间中任意一点到它的距离:
r = w T x + b ∣ ∣ w ∣ ∣ r=\frac{w^Tx+b}{||w||} r=wwTx+b
不明白可以以二维为例,二维空间的对应的划分超平面是一条直线 w 1 x 1 + w 2 x 2 + b = 0 w_1x_1+w_2x_2+b=0 w1x1+w2x2+b=0,点到直线的距离公式为 d = ∣ A x + B y + C ∣ A 2 + B 2 d=\frac{|Ax+By+C|}{\sqrt{A^2+B^2}} d=A2+B2 Ax+By+C,则点到超平面的距离为 r = ∣ w 1 x 1 + w 2 x 2 + b ∣ w 1 2 + w 2 2 r=\frac{|w_1x_1+w_2x_2+b|}{\sqrt{w_1^2+w_2^2}} r=w12+w22 w1x1+w2x2+b,推广到高维就明白上式了。

可正确分类的超平面满足:
(1) { w T x i + b &gt; 0 , y i = + 1 w T x i + b &lt; 0 , y i = − 1 \left\{ \begin{aligned} w^Tx_i+b&gt;0&amp;,&amp;y_i=+1\\ w^Tx_i+b&lt;0&amp;,&amp;y_i=-1 \end{aligned} \right. \tag1 {wTxi+b>0wTxi+b<0,,yi=+1yi=1(1)
but! 我们现在不仅要正确分类,而且要提出更高的标准,要留有“裕量”,即“间隔”:
(2) { w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1 \left\{ \begin{aligned} w^Tx_i+b\geq+1&amp;,&amp;y_i=+1\\ w^Tx_i+b\leq-1&amp;,&amp;y_i=-1 \end{aligned} \right. \tag 2 {wTxi+b+1wTxi+b1,,yi=+1yi=1(2)
支持向量support vector使(2)中不等式的等号成立的那些距离超平面最近的那几个训练样本点。
间隔margin两个异类支持向量到超平面的距离之和。 γ = 2 ∣ ∣ w ∣ ∣ \gamma=\frac{2}{||w||} γ=w2

在这里插入图片描述


(二)SVM的对偶问题推导

前面讲了间隔(硬间隔),我们希望硬间隔 γ = 2 ∣ ∣ w ∣ ∣ 2 \gamma=\frac{2}{||\boldsymbol w||_2} γ=w22尽量大,也就是 ∣ ∣ w ∣ ∣ 2 ||\boldsymbol w||_2 w2尽量小,so问题转化为
min ⁡ 1 2 ∣ ∣ w ∣ ∣ 2 2 , s . t . { w T x + b ≥ + 1 , y i = + 1 w T x + b ≤ − 1 , y i = − 1 \min \frac12||\boldsymbol w||^2_2,\quad s.t.\left\{ \begin{aligned} \boldsymbol w^T\boldsymbol x+b\geq+1&amp;,&amp;y_i=+1\\ \boldsymbol w^T\boldsymbol x+b\leq-1&amp;,&amp;y_i=-1 \end{aligned} \right. min21w22,s.t.{wTx+b+1wTx+b1,,yi=+1yi=1

(1) min ⁡ 1 2 ∣ ∣ w ∣ ∣ 2 2 , s . t . y i ( w T x + b ) ≥ 1 , y i ∈ { + 1 , − 1 } \min \frac12||\boldsymbol w||^2_2,\quad s.t.\quad y_i(\boldsymbol w^T \boldsymbol x+b)\geq1,y_i\in\left\{+1,-1\right\}\tag1 min21w22,s.t.yi(wTx+b)1,yi{+1,1}(1)

这是个二次规划问题(目标函数是变量的二次函数,约束是变量的线性不等式),并且标准形式中的Q矩阵在这里就是单位阵E,E是正定的,所以这是个凸二次规划,且在约束规定的可行域内有唯一的全局最小解。(关于二次规划详细介绍请移步xxxx)

常见的通用的二次规划算法有椭球法(ellipsoid method),内点法(interior point),增广拉格朗日法(augmented Lagrangian),梯度投影法(gradient projection),etc. 但是这个问题的规模正比于训练样本数,开销很大,所以需要根据问题特点开发更高效的算法,1998年由Platt提出的SMO算法就是典型代表。

先暂时不管具体求解,先把问题再深入分析分析,分析完了再说用SMO怎么求解 α \boldsymbol \alpha α

我们先用之前学的拉格朗日乘子法把问题转化为它的对偶问题(dual problem),共m个样本组成的不等式约束,那就引入m个KKT乘子(松弛变量) α i ( α i ≥ 0 ) \alpha_i(\alpha_i\geq0) αi(αi0)(这里不明白的话请移步我的这篇博客),把约束写进目标函数中,构造出拉格朗日函数为:

(2) L ( w , b , α ) = [ 1 2 w T w + ∑ i = 1 m α i ( 1 − y i ( w T x + b ) ) ] , α i ≥ 0 , y i ∈ { + 1 , − 1 } L(\boldsymbol w,b,\boldsymbol \alpha)=[ \frac12 \boldsymbol w^T\boldsymbol w+\sum_{i=1}^m\alpha_i(1-y_i(\boldsymbol w^T \boldsymbol x+b))],\alpha_i\geq0,y_i\in\left\{+1,-1\right\} \tag2 L(w,b,α)=[21wTw+i=1mαi(1yi(wTx+b))],αi0,yi{+1,1}(2)

松弛变量(slack variable)和训练样本是一一对应的。(one-to-one relationship)

为了得到拉格朗日对偶函数,对变量 w , b \boldsymbol w ,b w,b求偏导等于0,分别得到:

(3) w = ∑ i = 1 m α i y i x i , ∑ i = 1 m α i y i = 0 \boldsymbol w=\sum_{i=1}^m\alpha_iy_i\boldsymbol x_i,\quad \sum_{i=1}^m\alpha_iy_i=0 \tag3 w=i=1mαiyixi,i=1mαiyi=0(3)
也就是说,法向量 w \boldsymbol w w等于m个样本点向量的加权和,加权系数是 α i y i \alpha_iy_i αiyi,且这些加权系数之和为0.

把(3)代回拉格朗日函数(2),得到拉格朗日对偶函数

g ( α ) = [ 1 2 ( ∑ i = 1 m α i y i x ) T ( ∑ i = 1 m α i y i x ) − ∑ i = 1 m α i ] , y i ∈ { + 1 , − 1 } g(\boldsymbol \alpha)= [\frac12 \boldsymbol (\sum_{i=1}^m\alpha_iy_i\boldsymbol x)^T\boldsymbol (\sum_{i=1}^m\alpha_iy_i\boldsymbol x)-\sum_{i=1}^m\alpha_i]\quad, y_i\in\left\{+1,-1\right\} g(α)=[21(i=1mαiyix)T(i=1mαiyix)i=1mαi],yi{+1,1}

拉格朗日对偶问题为:

(4) max ⁡ α [ 1 2 ∑ i = 1 m ∑ j = 1 m α i y i α j y j x i T x j − ∑ i = 1 m α i ] , s . t . ∑ i = 1 m α i y i = 0 , α i ≥ 0 \max_{\boldsymbol \alpha} [\frac12 \sum_{i=1}^m\sum_{j=1}^m\alpha_iy_i\alpha_jy_j\boldsymbol {x_i}^T\boldsymbol {x_j}-\sum_{i=1}^m\alpha_i]\quad ,s.t.\sum_{i=1}^m\alpha_iy_i=0,\alpha_i\geq0 \tag4 αmax[21i=1mj=1mαiyiαjyjxiTxji=1mαi],s.t.i=1mαiyi=0,αi0(4)

记录一下:我至今没懂为啥第二项符号是负??????

由于SVM的模型里有不等式约束,所以必须满足KKT条件:
{ α i ≥ 0 y i f ( x i ) − 1 ≥ 0 α i ( y i f ( x i ) − 1 ) = 0 \left\{ \begin{aligned} \alpha_i\geq0\\ y_if(x_i)-1\geq0\\ \alpha_i(y_if(x_i)-1)=0 \end{aligned} \right. αi0yif(xi)10αi(yif(xi)1)=0
这三个式子就表明:非支持向量的KKT乘子为0,在式(3)求法向量时根本不做贡献,只有支持向量(满足KKT条件2的样本点)对模型求解有贡献。


(三)对偶问题具体求解(SMO算法)

前面第二节把SVM的基本模型转化为了对偶问题。由于原问题是凸优化问题,且训练样本里一定至少有一个非支持向量使得slater’s condition成立,所以强对偶成立,所以原问题的最优解就是对偶问题的最优解,这节就来具体讲怎么求出对偶问题的参数 α \boldsymbol \alpha α.

SMO算法是解析的方式求解,而不是数值优化,所以非常高效快速。

基本思路:每次选两个优化变量 α i , α j \alpha_i,\alpha_j αi,αj,固定其他 m − 2 m-2 m2个变量。即初始化参数 α \boldsymbol \alpha α后,迭代两个步骤till convergence:

  1. 选一对需要更新的变量 α i , α j \alpha_i,\alpha_j αi,αj
  2. 固定其他 m − 2 m-2 m2个变量,解析求出更新后的 α i , α j \alpha_i,\alpha_j αi,αj

可以看出,这个思路像极了坐标上升/下降,不过坐标上升/下降是一次优化一个变量,这里一次优化两个而已。那这里为啥要优化俩呢?这是因为第二节的公式(4),也就是最后的对偶问题里有个约束
∑ i = 1 m α i y i = 0 \sum_{i=1}^m\alpha_iy_i=0 i=1mαiyi=0
如果你一次只选一个变量进行优化固定其他 m − 1 m-1 m1个,那这个约束使得被选中的变量也直接固定下来了。。没得优化了。于是那就一次选俩,则有:
(1) α i y i + α j y j = − ∑ k = 1 , k ̸ = i , j m α k y k = c \alpha_iy_i+\alpha_jy_j=-\sum_{k=1,k\not=i,j}^m\alpha_ky_k=c\tag1 αiyi+αjyj=k=1,k̸=i,jmαkyk=c(1)
α j \alpha_j αj α i \alpha_i αi表示,代回第二节的(4),则对偶问题只有一个变量( α i \alpha_i αi),成了一个单变量的二次规划问题,直接对 α i \alpha_i αi求导等于0,就可以解析求出更新后的 α i ∗ \alpha_i^* αi,再代入本节(1),求出更新后的 α j ∗ \alpha_j^* αj。涉及到的全是解析步骤,没有一点数值迭代优化的内容,求出来的都是闭式解(即解析解),所以极其高效。

那么关键问题来了,每次依据什么准则选两个变量呢?

  1. 第一个变量:选择KKT条件违背程度最大的变量。
    我们知道,KKT条件是成为极值点的必要条件,满足KKT则有可能是极值点。现在还没找到极值点,所以KKT肯定不满足。那么优化KKT违背程度越大的变量,目标函数的变化幅度越大。
    回顾KKT:
    { α i ≥ 0 ( 1 ) y i f ( x i ) − 1 ≥ 0 ( 2 ) α i ( y i f ( x i ) − 1 ) = 0 ( 3 ) \left\{ \begin{aligned} \alpha_i\geq0 (1)\\ y_if(x_i)-1\geq0(2)\\ \alpha_i(y_if(x_i)-1)=0(3) \end{aligned} \right. αi0(1)yif(xi)10(2)αi(yif(xi)1)=0(3)
    对偶问题中,只有 α \boldsymbol \alpha α是未知变量, w , b \boldsymbol w,b w,b都已知。和 α i \alpha_i αi有关的只有(1)(3),而(1)是对偶问题的约束,必须满足,所以初始化 α \boldsymbol \alpha α时一定是满足(1)的。

至于条件(3):

  • y i f ( x i ) − 1 ̸ = 0 y_if(x_i)-1\not=0 yif(xi)1̸=0,则 α i \alpha_i αi 必须为0,所以若 α i ̸ = 0 \alpha_i\not=0 αi̸=0,则违背KKT,且 α i \alpha_i αi越大,违背程度越大。
  • y i f ( x i ) − 1 = 0 y_if(x_i)-1=0 yif(xi)1=0,则 α i ≥ 0 \alpha_i\geq0 αi0 ,怎么都不会违背。
  1. 第二个变量:选择对应样本点和第一个变量对应的样本点距离最远的变量。这样两个变量的差别很大,对目标函数带来的变化会比更新两个相似变量大。

求出 α \boldsymbol\alpha α后, w \boldsymbol w w由下式求出:
(2) w = ∑ i = 1 m α i y i x i \boldsymbol w=\sum_{i=1}^m\alpha_iy_i\boldsymbol x_i \tag2 w=i=1mαiyixi(2)

而偏移项 b b b的求解就要用到支持向量 ( x s , y s ) (\boldsymbol x_s,y_s) (xs,ys)了:
y s ( w T x s + b ) = 1 y_s(\boldsymbol w^T\boldsymbol x_s+b)=1 ys(wTxs+b)=1
但支持向量通常不止一个,所以b的解也不唯一,现实中常用所有支持向量求出的b的平均值作为最终解,这样比较鲁棒:

(3) b = 1 ∣ S ∣ ∑ s ∈ S ( y s − w T x s ) = 1 ∣ S ∣ ∑ s ∈ S ( y s − ∑ i = 1 m α i y i x i T x s ) b=\frac{1}{|S|}\sum_{s\in S}(y_s-\boldsymbol w^T\boldsymbol x_s)=\frac{1}{|S|}\sum_{s \in S}(y_s-\sum_{i=1}^m\alpha_iy_i\boldsymbol x_i^T \boldsymbol x_s)\tag3 b=S1sS(yswTxs)=S1sS(ysi=1mαiyixiTxs)(3)

S S S是支持向量集, ∣ S ∣ |S| S是支持向量的个数

由(2)(3), w , b \boldsymbol w,b w,b只和支持向量有关。直观上也很好理解,看下图,SVM的思想不像逻辑回归那样去拟合每个样本点,而是直接去找个划分平面把两类分开,那这个平面自然应该在两类的边界向量中间,它的位置 b b b和方向 w \boldsymbol w w w \boldsymbol w w的方向不是划分平面的方向,而是和划分平面正交)都由这两类样本的边界上的点决定。 w \boldsymbol w w定了后,每个支持向量都能算出一个 b b b,对应的平面和我们想要的超平面平行,但过那个支持向量,所以最终 b b b用(3)这种方式算,使划分超平面位于两类的正中间。

在这里插入图片描述

至此为止,则SVM的线性二分类模型参数全部求解完毕,训练完成。

感觉还是很神奇的,这么简单的一个想法,竟然能写出这么多的复杂的数学推导,而且最后得到的结论还和直观思考结果完全吻合,不得不叹服数学的神奇和强大,把朴素的思想用数学表示出来,很难,但一旦做到了,就贡献老大了。

呜呼!关于引入核方法把SVM用于非线性分类,后面会另开博文详细分析。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值