SVM支持向量机之深入SVM(二)

转载:
https://blog.csdn.net/ajianyingxiaoqinghan/article/details/72897399
https://blog.csdn.net/v_july_v/article/details/7624837
本文为个人学习所记,详情请移驾转载出处。

1、从线性可分到线性不可分

接着考虑上一篇博客中得到的式(4.3)中的目标函数:

max1/∥ω∥
s.t.,yi(ωT+b)=γi^≥γ^,i=1,...,n

由于求max1/∥ω∥的最大值,相当于求1/2∥ω∥^2的最小值,所以上述目标函数等价于下式:

min(1/2∥ω∥^2)
s.t.,yi(ωT+b)=γi^≥γ^,i=1,...,n                                                (1.1)

(1) 从原始问题到对偶问题的求解

由于现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。 这个问题可以用现成的QP (Quadratic Programming) 优化包进行求解。一言以蔽之:在一定的约束条件下,目标最优,损失最小。

此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(Dual Problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法。
这样做的优点在于:

对偶问题往往更容易求解;可以自然的引入核函数,进而推广到非线性分类问题。

什么是拉格朗日对偶型呢?简单的讲,通过给每一个约束条件加上一个拉格朗日乘子α(Lagrange Multiplier),定义拉格朗日函数如下式(1.2):

L(ω,b,α)=1/2∥ω∥^2 − ∑i=1-n αi[yi(ωTxi+b)−1]                                  (1.2)

注:
1.这里定义为拉格朗日函数的好处,在于通过拉格朗日函数将约束条件融合到目标函数里,从而只用一个函数表达式便能清楚表达出我们的问题。(具体内容可以见大学课堂的概率论教材);
2.拉格朗日乘子α={αi},i=1,…,n,且αi>0,i=1,…,n;

然后令:

θ(ω)=max αi≥0 L(ω,b,α)                                                         (1.3)

容易验证,当某个约束条件不满足时,例如yi(ωTxi+b)<1,那么显然有θ(ω)=+∞(只要让αi=+∞即可)。
而当所有约束条件都满足时,此时式(1.3)多项式的后一项∑i=1-n αi[yi(ωTxi+b)−1]>0,此时式(1.3)的最优值为θ(ω)=1/2‖ω‖^2,该值也为最初要最小化的量。

因此,在约束条件得到满足的情况下(包括拉格朗日乘子的约束条件:α={αi},i=1,…,n,且αi>0,i=1,…,n),最小化1/2∥ω∥^2,实际上等价于直接最小化(1.3)式θ(ω)。因为如果约束条件没有得到满足,θ(ω)会等于无穷大,自然不会是我们所要求的最小值。

具体写出来,目标函数变成了:

min ω,b θ(ω)=min ω,b max αi≥0 L(ω,b,α)=p∗                                      (1.4)

这里用p∗表示这个问题的最优解,而且与最初的问题等价。如果直接求解,那么一上来便得面对ω和b两个参数,而αi又是不等式约束,这个求解过程不好做。所以这里我们把最小和最大的位置交换,变成:

max αi≥0 min ω,b L(ω,b,α)=d∗                                                   (1.5)

交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用d∗表示,而且这里有d∗≤p∗,在满足某些条件(后文中的Slater条件)的情况下,d∗=p∗。这时候就可以通过求解对偶问题,间接地求解原始问题。换句话说,之所以从式(1.4)中的原始问题p∗,转换到式(1.5)中的对偶问题d∗,一是因为d∗是p∗的近似解,而是因为转化为对偶问题后更容易求解。
下面,我们可以先求L对ω,b的极小值,然后求L对α的极大值。

(2) KKT条件

上一小节中提到,在满足某些条件的情况下,d∗=p∗。这里某些条件是指Slater条件。
所谓Slater条件,就是指凸优化问题:如果存在一个点x,使得所有等式约束都成立,而且所有不等式约束都严格成立(即取>,<,不取≥,≤),则满足Slater条件。
对于此处,Slater条件成立,所以d∗≤p∗可以取等号。

一般情况下,一个最优化数学模型能表示成下列标准形式:

min f(x)
s.t.  hj(x)=0,j=1,...,p 
      gk(x)≤0,k=1,...,q
      x∈X⊂Rn                                                                  (1.6)

式(1.6)中参数如下:
f(x):需要最小化的函数;
h(x):等式约束;
g(x):不等式约束;
p,q:等式约束和不等式约束的数量;

同时,我们需要了解以下两点:

凸优化的概念:
χ⊂Rn为一凸集,f:χ⊂Rn为一个凸函数;
凸优化就是找出一点x∗∈χ,使得每一个x∈χ满足f(x∗)≤f(x),即x∗是f(x)的极小值点;

KKT条件的意义:
KKT条件是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件;
而KKT条件就是指上面式(1.6)中最优化数学模型的标准形式中的最小点x∗必须满足下面的条件,这些条件如下式(1.7)所示:

hj(x∗)=0,j=1,..,p,gk(x∗)≤0,k=1,...,q
∇f(x∗)+∑j=1pλj∇hj(x∗)+∑k=1qμk
∇gk(x∗)=0λj≠0,μk≤0,μkgk(x∗)=0                                                    (1.7)

经过论证,我们这里的问题是满足KKT条件的。原因如下:
满足Slater条件;
f=min(1/2∥ω∥^2)可微,g=yi(ωTxi+b)−1≥0可微,即在拉格朗日函数L(ω,b,α)中,L对ω,b都可导;
因为我们现在转化为求解第二个问题。也就是说,原始问题(即式(4.3))max1/‖ω‖,通过满足KKT条件,已经转化成了对偶问题(即式.1.5))max αi≥0 min ω,b L(ω,b,α)=d∗。

(3) 对偶问题求解的3个步骤

求解这个对偶学习问题,分为三个步骤:
1.令L(ω,b,α)关于ω和b最小化;
2.利用SMO算法求解对偶问题中的拉格朗日乘子,求对α的极大;
3.求参数ω,b;

下面按步骤进行说明:

A. 首先固定α,令L关于ω,b最小化
对于式(1.2),我们分别对ω,b求偏导数,即令∂L∂ω,∂L∂b等于0。

∂L∂ω=0 ⇒ ω=∑i=1-n αiyixi
∂L∂b=0 ⇒ ∑i=1-n αiyi = 0                                                          (1.8)

注:关于二范数的求导如下式(1.9)所示:

∂/∂x∥x−α∥2=(x−α)/∥x−α∥2
∂∥x∥2^2/∂x=∂∥xTx∥2/∂x=2x                                                        (1.9)

将上式(1.8)代入之前的式(1.2),即L=1/2∥ω∥^2 − ∑i=1-n αi[yi(ωTxi+b)−1]中,得到:

L=1/2∑ i,j=1-n αiαjyiyjxTixj − ∑ i,j=1-n αiαjyiyjxTixj − b∑i=1-n αiyi + ∑i=1-n αi
 = ∑i=1-n αi − 1/2∑i,j=1-n αiαjyiyjxTixj                                           (1.10)

关于上式(1.10)的推导比较复杂,如下式所示:

L(ω,b,α)=1/2∥ω∥^2 − ∑i=1-n αi[yi(ωTxi+b)−1]
        =1/2ωTω − ∑i=1-n αiyiωTxi − b∑i=1-n αiyi + ∑i=1-n αi                       (1.11)

将式(2.1.8)中的ω=∑ni=1αiyixi代入上式(1.11)中得:

L(ω,b,α)=1/2ωT⋅∑i=1-n αixiyi − ωT∑i=1-n αiyixi − b∑i=1-n αiyi + ∑i=1-n αi
        =−1/2ωT∑i=1-n αiyixi − b∑i=1-n αiyi + ∑i=1-n αi
        =−1/2[∑i=1-n αiyixi]T ∑i=1-n αiyixi − b∑i=1-n αiyi + ∑i=1-n αi
        =−1/2∑i=1-n αiyi(xi)T⋅∑i=1-n αiyixi − b∑i=1-n αiyi + ∑i=1-n αi
        =−1/2∑i,j=1-n αiαjyiyjxTixj + ∑i=1-n αi                                     (1.12)

经过式(1.11)与(1.12)的推导,即可得到式(1.10)。
在式(1.10)中我们可以看出,由于xi,yi都是已知量,所以此时的拉格朗日函数只包含了一个变量,那就是αi(i=1,…,n)。只要求出了αi,就能在后面的步骤中求出ω,b,从而求出分类函数f(x)=ωT+b。

B. 利用SMO算法求解对偶问题中的拉格朗日乘子
求对α的极大值,就是关于对偶问题的最优化问题。经过上一个步骤的求取ω,b,得到的拉格朗日函数已经没有了变量ω,b,只存在变量α。
通过上面的式(1.5), (1.6), (1.10),可以得到此时的目标函数:

maxα∑i=1-n αi − 1/2∑i=1-n αiαjyiyjxTixj
s.t.,αi≥0,i=1,...,n
∑i=1-n αiyi=0                                                              (1.13)

这时候通过SMO算法可以求解对偶问题中的拉格朗日乘子α。
注:关于SMO算法,可以跳到后文,即下一篇博客。但SMO算法中需要使用到后文讲到的核函数、松弛因子的概念,所以笔者建议还是按照顺序进行学习。

这样求出了极值情况下的αi,就可以求出极值情况下的ω,b。

C. 求参数ω,b
上面一步求出了拉格朗日乘子α。通过式(1.8),可以计算出:

ω∗=∑i=1-n αiyixi

这里的ω∗是指极值情况下的ω值,再然后可以求b值。由于对于边界上的支持向量有:

y(ωTx+b)=1                                                                  (1.14)

式(1.14)的参数xx数据点是支持向量,参数yy表示支持向量所属类别(取值1或-1)。
而在y=−1,y=1的类别中,支持向量处于边界点。由超平面的图(即图1.6)可得:

max yi=−1 ωTxi+b=−1
min yi=1 ωTxi+b=1                                                           (1.15)

上式(1.15)中的两式相加,得到极值情况下的b值,记为b∗:

b∗=1/2[max yi=−1 ω∗Txi + min yi=1 ω∗Txi]                                     (1.16)

这样就求出了ω,b,α,便求出了我们在线性情况下的超平面f(x)。

(4) 线性不可分的情况

到目前为止,我们的 SVM 还比较弱,只能处理线性的情况,下面我们将引入核函数,进而推广到非线性分类问题。
让我们再来看看上述推导过程中得到的一些有趣的形式。首先就是关于我们的超平面,对于一个数据点x分类,实际上是通过把x带入到f(x)=ωTx+b算出结果,然后根据其正负号进行类别划分的。在前面的推导中,我们得到式(1.8)):

ω∗ = ∑i=1-n αiyixi

因此我们的分类函数为:

f(x) = (∑i=1-n αiyixi)Tx+b = ∑i=1-n αiyi⟨xi,x⟩+b                              (1.17)

上式(1.17)中,符号⟨⋅,⋅⟩表示向量内积。

这里的形式的有趣之处在于,对于新点x的预测,只需要计算它与训练数据点的内积即可。这一点是之后使用核函数Kernel进行非线性推广的基本前提,至关重要。

此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非支持向量所对应的系数αα都是等于零的,因此对于新点的内积计算,不需要针对所有的训练数据,实际上只要针对少量的支持向量就可以了。

为什么非支持向量对应的α等于零呢?直观上来理解的话,就是这些“后方”的点(即在超平面另一侧的点)——正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。

在本节第一小节中,通过拉格朗日乘子得到的目标函数(式(1.3))如下:

θ(ω)= max αi≥0 L(ω,b,α) 
    = max αi≥0 1/2∥ω∥^2 − ∑i=1-n αi[yi(ωTxi+b)−1]

注意:如果xi是支持向量的话,上式右边的 yi(ωTxi+b)−1 部分是等于0的,因为支持向量的函数间隔等于1;而对于非支持向量来说,函数间隔大于0,所以yi(ωTxi+b)−1部分是大于0的。而αi≥0(见式(1.2)的注),所以为了满足最大化,αi必须等于0。这也是非支持向量点的局限性。

至此,便得到了一个最大间隔超平面分类器(Maximum Margin Hyper Plane Classifier),这就是所谓的支持向量机(Support Vector Machine)。但是到目前为止,我们的 SVM 还比较弱,只能处理线性的情况。不过,在得到了对偶dual 形式之后,通过核函数Kernel推广到非线性的情况就变成了一件非常容易的事情了。

2.核函数Kernel

(1) 特征空间的隐式映射

事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。
在上文中,我们已经了解到了SVM处理线性可分的情况,那对于非线性的数据SVM应该怎么处理?对于非线性的情况,SVM 的处理方法是选择一个核函数K(⋅,⋅),通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。

具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图1所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:
在这里插入图片描述
图1 二维空间数据映射到三维空间里并划分

而在我们遇到核函数之前,如果用原始的方法,那么在用线性学习器学习一个非线性关系,需要选择一个非线性特征集,并且将数据写成新的表达形式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,因此,考虑的假设集是如下式(2.1)这种类型的函数:

f(x)= ∑i=1-n ωiϕi(x)+b                                                  (2.1)

这里的ϕ:X→F是从输入空间到某个特征空间的映射。

这意味着,建立非线性学习器分为两步:
使用一个非线性映射将原始数据x变换到一个特征空间F;
在特征空间使用线性学习器分类。

而由前面的内容可以了解到,对偶形式是线性学习器的一个重要性质,这意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:

f(x)= ∑i=1-n αiyi⟨ϕ(xi),ϕ(x)⟩ + b                                        (2.2)

上式(2.2)中,⟨ϕ(xi),ϕ(x)⟩的意义就是在特征空间中直接计算内积。这种像在原始输入点的函数中一样,有可能将上面两个步骤融合到一起建立一个非线性的学习器,这样直接计算的方法,被称为核函数方法。

这里的核,是一个函数K,对于所有的数据点x,z∈X,满足:

K(x,z)=⟨ϕ(x),ϕ(z)⟩                                                       (2.3)

(2) 核函数:如何处理非线性数据

A. 原始数据的映射
来看个核函数的例子。如下图2所示的两类数据,分别分布为两个圆圈的形状,这样的数据本身就是线性不可分的,此时我们该如何把这两类数据分开?
注:后面会有July大神的好友pluskid提供的gif动图说明。
在这里插入图片描述
图2 圆圈状的数据

事实上,上图所述的这个数据集,是用两个半径不同的圆圈加上了少量的噪音生成得到的。所以,一个理想的分界应该是一个“圆圈”,而不是一条线(超平面)。如果用x1,x2来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:

a1x1+a2x21+a3x2+a4x22+a5x1x2+a6=0                                      (2.4)

在上面形式的基础上,如果我们构造另外一个五维的空间,其中五个坐标的值分别为Z1=x1,Z2=x21,Z3=x2,Z4=x22,Z5=x1x2,那么显然式(2.4)中的方程在新的坐标系下可以写成:

∑i=1-5 aiZi + a6 = 0                                                   (2.5)

关于新的坐标Z,这正是一个超平面的方程!解释一下,就是说如果我们做一个映射ϕ:R2→R5,将x按照上面的规则映射为Z,那么在新的五维空间中,原来的数据将会变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是Kernel方法处理非线性问题的基本思想。

在进一步描述Kernel的细节之前,不妨再来看看这个例子映射过后的直观例子。虽然我们可能无法把 5 维空间画出来,不过由于July大神这里生成数据的时候就是用了特殊的情形,具体来说,我们这里的超平面实际的方程是这个样子(圆心在 X2 轴上的一个正圆),因此我们只需要把它映射到Z1=x1,Z2=x21,Z3=x2这样一个三维空间里就可以了。

下图3是July大神的好友pluskid提供的gif动图:

在这里插入图片描述
图3 映射到三维空间的数据动图

上图映射之后的结果,将坐标轴经过适当的旋转,就可以很明显地看出,数据是可以通过一个平面来分开的。
上面的例子可以体现,核函数相当于将原来的分类函数:

f(x)= ∑i=1-n αiyi⟨xi,x⟩ + b

映射成了式(2.2)中的:

f(x)=∑i=1-n αiyi⟨ϕ(xi),ϕ(x)⟩ + b

而其中的α值是可以通过求解由(1.13)映射变形来的对偶问题得到:

max α∑i=1-n αi − 1/2∑i=1-n αiαjyiyj⟨ϕ(xi),ϕ(xj)⟩
s.t.,αi≥0,i=1,...,n 
      ∑i=1nαiyi=0                                                          (2.6)

B. 维度爆炸问题的解决
看起来问题似乎解决了:拿到了非线性数据,就找一个映射ϕ(⋅),然后一股脑把原来的数据映射到新空间中,再做线性 SVM 即可。

而实际上并没有这么简单,原因在于可能出现维度爆炸的情况。

刚才的方法稍想一下就会发现有问题:在最初的例子里,我们对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;如果原始空间是三维,那么我们展开后会得到19维的新空间。这样的话,维度数目是呈爆炸增长的,这给ϕ(⋅)的计算带来了非常大的困难,而且如果遇到了无穷维的计算,就根本无从计算了。
这时候仍然需要Kernel方法解决这个问题。

仍然从最开始的简单例子出发:设两个向量x1=(η1,η2)T,x2=(ξ1,ξ2)T,而ϕ(⋅)是前面说到的五维空间映射。映射后的内积为:

⟨ϕ(x1),ϕ(x2)⟩=η1ξ1+η1^2ξ1^2+η2ξ2+η2^2ξ2^2+η1η2ξ1ξ2                          (2.7)

对于上式(2.7)的推导,其实就是把x1,x2的映射ϕ(x1),ϕ(x2)展开,然后作相应的内积运算即可得到。讲解如下:
由上面可知,若有向量x=(x1,x2)T,则映射的结果应该是:

ϕ(x)=x1+x1^2+x2+x2^2+x1x2

又由于x1=(η1,η2)T,x2=(ξ1,ξ2)T,则x1,x2的映射如下:

ϕ(x1)=(η1,η21,η2,η2^2,η1η2)
ϕ(x2)=(ξ1,ξ21,ξ2,ξ2^2,ξ1ξ2)

上式作内积运算即可得到式(2.7):

⟨ϕ(x1),ϕ(x2)⟩=η1ξ1+η1^2ξ1^2+η2ξ2+η2^2ξ2^2+η1η2ξ1ξ2   

另外,如果我们如果计算下式:

(⟨x1,x2⟩+1)2=2η1ξ1+η1^ξ1^+η2ξ2+η2^2ξ2^2+2η1η2ξ1ξ2+1                         (2.8)

式(2.8)与式(2.7)相比,两者有很多相似的地方。实际上,我们只要把映射的某几个维度线性缩放一下,然后再加上一个常数维度,计算出来的结果和经过映射的两向量内积的结果是相等的。

具体来说,如果对于向量x=(a,b)T,设置新映射如下式:

φ(x)=(√2a,a^2,√2b,b^2,√2ab,1)T                                             (2.9)

则式(2.8)即(⟨x1,x2⟩+1)2的结果和内积⟨φ(x1),φ(x2)⟩的结果是相等的。然而两者的区别在于什么地方呢?
(⟨x1,x2⟩+1)2:直接在原来的低维空间进行计算,而不需要显式的写出映射后的结果。
⟨φ(x1),φ(x2)⟩:先映射到高维空间,然后根据内积的公式进行计算;
注:关于上述两个公式的说明

(⟨x1,x2⟩+1)2:是带内积的完全平方式,可以拆开,然后通过凑一个常数得到;
⟨φ(x1),φ(x2)⟩:也是根据第一个式子拼凑得到的;

回到刚才提到的维度爆炸,在⟨φ(x1),φ(x2)⟩的方法不能计算的情况下,另一种方法(⟨x1,x2⟩+1)2却能从容处理,甚至无穷维度的情况也可以计算。

我们把这里的计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数(Kernel Function)。例如在刚才的例子中,我们的核函数就是:

K(x1,x2)=(⟨x1,x2⟩+1)2                                                       (2.10)

核函数能简化映射空间中的内积运算——碰巧的是,在我们的SVM里需要计算的地方,数据向量总是以内积的形式出现的。对比刚才我们上面写出来的式(2.2),现在我们的分类函数为:

∑i=1-n αiyiK(xi,x) + b                                                     (2.11)

这时候,前面式(2.6)也可以变形为:

max α∑i=1-n αi−1/2∑i=1-n αiαjyiyjK(xi,xj)
s.t.,αi≥0,i=1,...,n
     ∑i=1nαiyi=0                                                           (2.12)

通过上式(2.12),我们可以由该对偶问题计算得到α。这样一来计算的问题就算解决了,避开了直接在高维空间中进行计算,而结果却是等价的!

当然,因为我们这里的例子非常简单,所以我可以手工构造出对应于ϕ(⋅)的核函数出来,如果对于任意一个映射,想要构造出对应的核函数就很困难了。下面我们介绍几个常用的核函数。

(3) 几个常用核函数
通常人们会从一些常用的核函数中选择(根据问题和数据的不同,选择不同的参数,实际上就是得到了不同的核函数)。

A. 多项式核
多项式核形式如下:

K(x1,x2)=(⟨x1,x2⟩+R)d                                                       (2.13)

显然刚才我们举的例子是这里多项式核的一个特例(R = 1, d = 2)。
B. 高斯核
高斯核形式如下:

K(x1,x2)=exp(−∥x1−x2∥^2/2σ^2)                                             (2.14)

这个核就是最开始提到过的,会将原始空间映射为无穷维空间的那个家伙。

不过,如果σ选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果σ选得很小,则可以将任意的数据映射为线性可分,当然这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。

不过总的来说,通过调控参数σ,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。下图4所示的例子便是把低维线性不可分的数据通过高斯核函数映射到了高维空间:

在这里插入图片描述
图4 高斯核将低维不可分数据映射到高维空间
C. 线性核
线性核形式如下:

K(x1,x2)=⟨x1,x2⟩                                                           (2.15)

这个核实际上就是原始空间中的内积,它存在的主要目的是使得“映射后空间中的问题”和“映射前空间中的问题”两者在形式上统一起来了。这里的意思是说,咱们写代码或写公式的时候,只要写个模板或通用表达式,然后再代入不同的核就可以了。这样便不用再分别写一个线性的,和一个非线性的,在形式上统一了起来。

(4) 核函数的本质

上面说了这么多,还是要在这里概括一下核函数到底是什么东西。基本上就是三点:

实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去(如上文的图2与图3,映射到高维空间后,相关特征便被分开了,也就达到了分类的目的);

但进一步,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的(即维度爆炸,如前文说的19维甚至无穷维的例子);

此时,核函数就隆重登场了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。

最后引用一个例程,举例说明一下核函数解决非线性问题的直观效果:
假设现在你是一个农场主,圈养了一批羊群,但为预防狼群袭击羊群,你需要搭建一个篱笆来把羊群围起来。但是篱笆应该建在哪里呢?你很可能需要依据牛群和狼群的位置建立一个分类器,比较下图这几种不同的分类器,我们可以看到SVM完成了一个很完美的解决方案。
在这里插入图片描述
图5 SVM, Logistic回归,决策树的分类效果对比

这个例子从侧面简单说明了SVM使用非线性分类器的优势,而逻辑模式以及决策树模式都是使用了直线方法。

3. 松弛变量

在本文第一节最开始讨论支持向量机的时候,我们就假定,数据是线性可分的,亦即我们可以找到一个可行的超平面将数据完全分开。后来为了处理非线性数据,在本章第2节使用Kernel方法对原来的线性 SVM 进行了推广,使得非线性的情况也能处理。虽然通过映射ϕ(⋅)ϕ(⋅)将原始数据映射到高维空间之后,能够线性分隔的概率大大增加,但是对于某些情况还是很难处理。

例如可能并不是因为数据本身是非线性结构的,而只是因为数据有噪音。对于这种偏离正常位置很远的数据点,我们称之为outlier,在我们原来的 SVM 模型里,outlier 的存在有可能造成很大的影响,因为超平面本身就是只有少数几个支持向量组成的,如果这些支持向量里又存在 outlier 的话,其影响就很大了。比如下图2.6所示:

在这里插入图片描述
图6 outlier对超平面的影响

用黑圈圈起来的那个蓝点是一个 outlier ,它偏离了自己原本所应该在的那个半空间,如果直接忽略掉它的话,原来的分隔超平面还是挺好的。但是由于这个 outlier 的出现,导致分隔超平面不得不被挤歪了,变成途中黑色虚线所示(这只是一个示意图,并没有严格计算精确坐标),同时函数间隔也相应变小了。当然,更严重的情况是,如果这个 outlier 再往右上移动一些距离的话,我们将无法构造出能将数据分开的超平面来。

为了处理这种情况,SVM 允许数据点在一定程度上偏离一下超平面。例如上图中,黑色实线所对应的距离,就是该 outlier 偏离的距离,如果把它移动回来,就刚好落在原来的蓝色间隔边界上,而不会使得超平面发生变形了。换言之,在有松弛的情况下outline点也属于支持向量SVM,同时,对于不同的支持向量,拉格朗日参数的值也不同。
在论文《Large Scale Machine Learning》中阐述了相关内容,如下图7所示:

在这里插入图片描述
图2.7 有松弛的outlier的处理

以分类平面为界,可以将点分为三类:
远离分类平面的点值为0;
边缘上的点,值在[0,1L]之间;
其中,L为训练数据集个数,即数据集大小;
outline数据和分类平面内部的数据值为1/L;

回到之前的问题,原本的约束条件如式(1.1)中:

yi(ωTxi+b)≥1,i=1,...,n

现在考虑到outlier问题,约束条件便改成:

yi(ωTxi+b)≥1−ξi,i=1,...,n                                                     (3.1)

其中ξi≥0称为松弛变量(Slack Variable),指对应数据点xi允许偏离的函数间隔的量。

当然,如果我们允许ξi任意大的话,那么任意的超平面都是符合条件的了,所以我们仍然需要在(1.1)式中原来的目标函数后面加上一项,使得这些ξi的总和最小。即现在的目标函数变为下式:

min1/2∥ω∥^2+C∑i=1-n ξi                                                       (3.2)

上式(3.2)中,需要在寻找间隔最大的超平面,与保证数据点偏差最小之间进行权衡。而C是一个参数,是目标函数中上述两项的权重。如果把目标函数与约束条件完整的写出来,应该如下式所示:

min1/2∥ω∥^2 + C∑i=1-n ξi
s.t.,yi(ωTxi+b)≥1−ξi,i=1,...,n
     ξi≥0,i=1,...,n                                                           (3.3)

再用本章第1节第(1)小节式(1.2)的方法,将约束条件加入到目标函数中,得到新的拉格朗日函数,如下式所示:

L(ω,b,ξ,α,r)=1/2∥ω∥^2 + C∑i=1-n ξi − ∑i=1-n αi[yi(ωTxi+b)−1] − ∑i=1-n riξi                     (3.4)

其中ri的存在与αi是一样的。αi是第一个限制条件yi(ωTxi+b)≥1−ξi的拉格朗日乘子,ri是第二个限制条件ξi≥0的拉格朗日乘子。
分析方法与前面一样,转换为对偶问题后,我们先让L对ω,b,ξ求偏导并令其为0,得到下式:

∂L∂ω=0 ⇒ ω=∑i=1-n αiyixi
∂L∂b=0 ⇒ ∑i=1-n αiyi=0 
∂L∂ξi=0 ⇒ C−αi−ri=0,i=1,...,n                                                  (3.5)

将上式中的ω代入L并化简,得到和原来一样的目标函数(即式(1.13)):

max α∑i=1-n αi − 1/2∑i,j=1-n αiαjyiyj⟨xi,xj⟩

不过由于我们得到了式(3.5)中的限制条件C−αi−ri=0,以及ri≥0,因此可以得到αi≤C。因此现在整个对偶问题写作:

max α∑i=1-n αi − 1/2∑i,j=1-n αiαjyiyj⟨xi,xj⟩
s.t.,0≤αi≤C,i=1,...,n
∑i=1-n αiyi=0                                                                  (3.5)

把前后的结果对比一下(错误修正:图中的Dual formulation中的Minimize应为maxmize):

在这里插入图片描述
图8 原公式与对偶公式的对比

可以对比得到,唯一的区别就是现在对偶变量α多了一个上限C。而 Kernel 化的非线性形式也是一样的,只要把⟨xi,xj⟩换成K(xi,xj)即可。
这样一来,一个完整的,可以处理线性和非线性并能容忍噪音和 outliers 的支持向量机终于介绍完毕了。

4. 总结

不准确的说,SVM 它本质上即是一个分类方法。基本可以用如下内容来概括它的要点:

用ωT+b定义分类函数;
求ω,b;
为了寻找最大间隔,引出1/2∥ω∥^2;
引入拉格朗日因子,化为对拉格朗日乘子α的求解;
求解过程中,处理一系列最优化与凸二次规划的问题;
求解αα时可以使用快速学习方法SMO;
处理非线性情况时,使用核函数;
核函数在低维计算,等效了高维表现,避免了直接映射到高维计算时可能出现的维度爆炸现象;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值