【统计学习方法-李航-笔记总结】七、支持向量机

本文是李航老师《统计学习方法》第七章的笔记,欢迎大佬巨佬们交流。

主要参考博客:

https://www.cnblogs.com/YongSun/p/4767130.html

https://blog.csdn.net/wjlucc/article/details/69376003

主要内容包括:

1. 线性可分支持向量机与硬间隔最大化

2. 线性支持向量机与软间隔最大化

3. 非线性支持向量机与核函数

4. 序列最小优化算法

    支持向量机(support vector machines, SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法。

1. 线性可分支持向量机与硬间隔最大化(线性可分数据)

(1)线性可分支持向量机

    对于一个平面上的线性可分的二分类问题,学习的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类。一般地,当训练集线性可分时,存在无穷多个超平面可将两类数据正确分开。感知机利用误分类最小策略,求得分离超平面,不过这时的解仍有无穷多,而线性可分支持向量机利用间隔最大化求最优的分离超平面,此时的解唯一。如下图所示:

    关于感知机的详细解释,请见博客:https://blog.csdn.net/zl3090/article/details/82688419

    线性可分支持向量机:给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为,以及相应的分类决策函数,称为线性可分支持向量机。

    也就是说线性可分支持向量机对应着将两类数据正确划分且间隔最大的直线。

(2)函数间隔和几何间隔

    一般来说,一个点距离分离超平面的远近可以表示分类预测的确信程度,在超平面wx+b=0确定的情况下,|wx+b|能够相对地表示点x距离超平面的远近,而wx+b的符号与标记类y的符号是否一致能表示分类是否正确,所以可以用y(wx+b)来表示分类的正确性及确信度,这就是函数间隔的概念。

    函数间隔:对于给定的训练数据集T和超平面(w, b),定义超平面关于样本点(xi, yi)的函数间隔为,定义超平面(w,b)关于训练数据集T的函数间隔为超平面(w,b)关于T中所有样本点(xi, yi)的函数间隔之最小值,即

    函数间隔可以表示分类预测的正确性及确信度。但是成比例地改变w和b,例如将它们改为2w和2b,超平面并没有改变,但函数间隔却成为原来的2倍。对分离超平面的法向量、加某些约束,如规范化,||w||=1,使得间隔是确定的。这时函数间隔成为几何间隔。

    如下图所示,点A表示某一实例xi,其标记类为yi=+1,点A与超平面(w,b)的距离由线段AB给出,记作γi,,其中||w||为w的L2范数;如果点A在超平面的负侧,那么yi=-1,那么点与超平面的距离为

    一般地,当样本点(xi,yi)被超平面(w,b)正确分类时,点xi与超平面(w,b)的距离是

    几何间隔:对于给定的训练数据集T和超平面(w, b),定义超平面关于样本点(xi, yi)的几何间隔为,定义超平面(w,b)关于训练数据集T的函数间隔为超平面(w,b)关于T中所有样本点(xi, yi)的函数间隔之最小值,即

    几何间隔与函数间隔都是实例点到超平面的带符号的距离,二者关系如下:

  

    如果||w||=1,那个函数间隔与几何间隔相等,如果超平面参数w和b成比例改变,则超平面不会改变,函数间隔会按照此比例改变,而几何间隔不变。

(3)间隔最大化

    支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化。   

    间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类,也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。

    最大间隔分离超平面:即求解一个几何间隔最大的分离超平面,具体地,该问题可以优化成下面的约束最优化问题:

    

    即我们希望最大化超平面(w,b)是关于训练数据集的几何间隔γ,约束条件表示的是超平面(w,b)关于每个训练样本点的几何间隔至少是γ。按照几何间隔与函数间隔的关系式,问题可以改写为:

    

    函数间隔\widehat{\gamma }的取值并不影响最优化问题的解,假设将w和b按比例改为λw和λb,这时函数间隔变为\lambda \widehat{\gamma },函数间隔的这一改变对上边优化问题的不等式约束没有影响,对目标函数的优化也没有影响,因此它产生了一个等价的优化问题,可以取\widehat{\gamma }=1(将函数间隔\widehat{\gamma }固定为1,对于一个特定的超平面相当于将w和b固定了),并带入上式,同时注意到最大化\frac{1}{||w||}和最小化\frac{||w||^{2}}{2}是等价的,因此得到线性可分支持向量机的最优化问题

    

    这是一个凸二次规划问题,凸优化问题是指约束最优化问题:

    

    其中,目标函数f(w)和约束函数gi(w)都是R^{n}上连续可微的凸函数,约束函数hi(w)是目标R^{n}上的仿射函数。当目标函数f(w)是二次函数且约束函数gi(w)是仿射函数时,上述凸优化问题成为凸二次规划问题。

    上述算法描述如下:

  

    最大间隔分离超平面的存在唯一性:若训练数据集T线性可分,则可将训练数据集中的样本点完全正确分开的最大间隔分离超平面存在且唯一。

    存在性:由于训练数据集线性可分,因此最优化问题一定存在可行解,又由于目标函数有下界,因此该最优化问题必有解,记作(w*,b*)。由于分类中既有正类又有负类,因此(w,b)=(0,b)不是最优化的可行解,因此w*≠0,由此得知分离超平面存在。

    唯一性:此处优化问题(7.13)-(7.14)即是:优化问题:

    

    支持向量和边界间隔:在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量( support vector )。支持向量是使约束条件式等号成立的点,即:

    对yi=+1的正例点,支持向量在超平面:

    对yi=-1的负例点,支持向量在超平面:

    下图中在H1和H2上的点就是支持向量:

    

    H1和H2平行,且之间的距离称为间隔(margin)。间隔依赖于分离超平面的法向量w,等于\frac{2}{||w||}。H1和H2称为间隔边界。

    在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。如果移动支持向量将改变所求的解;但是如果移动其他实例点,甚至去掉这些点,则解是不会改变的。由于支持向量在确定分离超平面中起决定性作用,所以将这种分类模型称为支持向量机。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。

(4)学习的对偶算法

    对偶算法是引入拉格朗日对偶函数,使问题更容易求解,同时引入核函数,使非线性分类问题也可应用。

    关于对偶问题的解释可以详见博客:https://blog.csdn.net/blackyuanc/article/details/67640844

    首先构建拉格朗日函数,引进拉格朗日乘子α:

    根据拉格朗日对偶性,原问题的对偶问题是:

    为了得到对偶问题的解,需要先求L(w,b,α)对w,b的极小,再对α的极大:

(a)求:

        将拉格朗日函数L(w,b,α)分别对w和b求偏导数,并令其等于0:

                                 

        将(7.19)和(7.20)带入拉格朗日函数:

                                

       即:                  

(b)求对α的极大,即是对偶问题:

                                

         将上述目标函数由求极大转换成求极小,就得到与之等价的对偶问题:

                               

    随后,需要从对偶问题的解推出原始问题解,有定理如下:

    设是对偶最优化问题的解,则,存在下标j,使得,并可按照下式求得原始最优化问题的解:

    

    证明:

    

    由此定理,分离超平面可以写成:

    分类决策函数可写成:

    根据上式,对于新点x的预测,只需要计算x与训练数据点的內积即可,并且只需要计算和α*i>0对应的样本点xi的內积,α*i>0对应的样本点就是支持向量,数目很少。 
    综上,线性可分支持向量机的对偶学习算法可描述为:对于给定的线性可分数据集,可以先求对偶问题的解α*,再求原始问题的解w*,b*,从而得到分离超平面及分类决策函数,算法具体描述如下:

    

    支持向量:支持向量有两种解释,一种是直观的解释,一种是和对偶最优化问题的解α*联系起来了:

    直观解释(与函数间隔联系的解释):在线性可分的情况下,训练数据集中的样本点与分离超平面距离最近的样本点的实例称为支持向量;与对偶问题联系的解释:在线性可分支持向量机中,(w*,b*)只依赖于训练数据中对应于α*i>0的样本点(xi,yi),而其他样本点对(w*,b*)没有影响,将训练数据中对应于α*i>0的实例点(xi,yi)称为支持向量。 

2. 线性支持向量机与软间隔最大化(近似线性可分数据)

    为了使线性可分问题的支持向量机学习方法扩展到线性不可分问题,需要把硬间隔最大化修改为软间隔最大化。

(1)线性支持向量机

    线性不可分数据集通常的情况是,数据中有一些特异点,将这些特异点除去后,剩下大部分的样本点是线性可分的。线性不可分意味着某些样本点不能满足函数间隔大于等于1的约束条件,为了解决这个问题,可以对每个样本点引进一个松弛变量,约束条件变为:

    同时,对于每个松弛变量ξi,支付一个代价ξi,目标函数由原来的\frac{||w||^2}{2}变成,这里C称为惩罚参数,C值增大对误分类的惩罚增大,减小则惩罚减小。目标函数包含两层含义:使\frac{||w||^2}{2}尽量小,即间隔尽量大,同时使误分类点的个数尽量小,C是调和二者的系数。相对于硬间隔最大化,它称为软间隔最大化。

    原始问题:线性不可分的线性支持向量机的学习问题变为如下凸二次规划问题:

    

    线性支持向量机:对于给定的线性不可分训练数据集,通过求解凸二次规划问题,即软间隔最大化,得到的分离超平面为:,以及相应的分类决策函数,称为线性支持向量机。

(2)学习的对偶算法

    原始问题的对偶问题是:

    

    原始最优化问题的拉格朗日函数是:

    还是先求L(w,b,ξ,α,μ)对w,b,ξ的极小(分别求偏导数,在令偏导数为0),由:

    

    将(7.41)-(7.43)带入L得:

    即得对偶问题为:

    

    

    合并约束为:

    根据对偶问题求原始问题的定理:设是对偶最优化问题的解,则,存在α*的一个分量α*j,0<α*j<C,并可按照下式求得原始最优化问题的解:

    

    由此分离超平面为:

    分类决策函数写成:

    上述算法描述如下:

    

(3)支持向量

    线性不可分的情况下,将对偶问题的解a*中对应于aj* > 0的样本点(xi,yi)的实例xi称为支持向量(软间隔的支持向量)。

    

    软间隔的支持向量xi或者在间隔边界上,或者在间隔边界与分离超平面之间,或者在分离超平面误分一侧。

    若α*<C,则约束,支持向量xi恰好落在间隔边界上;

    若α*<C,0<约束<1,则分类正确,xi在间隔边界与分离超平面之间;

    若α*<C,约束=1,则xi在分离超平面上:

    若α*<C,约束>1,则xi位于分离超平面误分一侧。

(4)合页损失函数

    线性支持向量机学习还有另外一种解释,就是最小化以下目标函数:

    

    目标函数的第一项是经验损失或经验风险,函数称为合页损失函数,第二项为L2正则化。

    下标“+”表示以下取正值的函数:

    这就是说,当样本点(xi,yi)被正确分类且函数间隔(确信度)yi(w*xi+b)大于1的时候,损失是0,否则是1-yi(w*xi+b)。

    合页损失函数的形状与0-1函数如图所示,平行于x轴的是0-1损失函数,虚线是感知机损失函数:

    

    等价问题:线性支持向量机原始最优化问题:等价于优化问题

3. 非线性支持向量机与核函数(线性不可分数据)

(1)核技巧

    非线性分类问题:如果能用R^n(n代表特征空间R的维数)中的一个超曲面将正负例正确分开,则称这个问题为非线性可分问题。非线性分类问题往往不好求解,需要将其变换为线性问题,将非线性分类问题变换为线性分类问题。核技巧应用到支持向量机,其基本想法就是通过一个非线性变换将输入空间(欧氏空间R^n或离散集合)对应于一个特征空间(希尔伯特空间H),使得在输入空间R^n中的超曲面模型对应于特征空间H中的超平面模型(支持向量机)。

    核函数:设X是输入空间,H为特征空间,如果存在一个映射映射函数

使得对所有属于X的x,z,函数K(x,z)满足条件则称K(x,z)为核函数,Φ(x)为映射函数,式中Φ(x)·Φ(z)为内积。

    核技巧的想法是,在学习与预测中只定义核函数K(x,z),而不显式地定义映射函数,通常直接计算K(x,z)比较容易。对于给定的核K(x,z),特征空间x和映射函数的取法并不唯一,可以取不同的特征空间,即便是在同一特征空间里也可以取不同的映射。

    下边是一个能说明核函数和映射函数关系的例子:

    

    核技巧在支持向量机中的应用:在线性支持向量机的对偶问题中,无论是目标函数还是决策函数(分离超平面)都只涉及输入实例与实例之间的内积,因此在对偶问题的目标函数中的内积(xi*xj)可以用核函数K(xi, xj)来代替,即:

    

    同样,分类决策函数中的内积也可以用核函数代替,而分类决策函数式变为:

    

     这等价于经过映射函数将原来的输入空间变换到一个新的特征空间,将输入空间中的内积(xi*xj)变换为特征空间中的内积Φ(x)·Φ(z)。在新的特征空间里从训练样本中学习线性支持向量机。当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类模型。在核函数给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,不需要显式地定义特征空间和映射函数。这样的技巧称为核技巧。

(2)正定核

    这部分解决的主要问题是,函数K(x,z)满足什么条件才能成为核函数?通常所说的核函数就是正定核函数。

    正定核的充要条件:设K:X*X->R是对称函数,则K(x,z)为正定核函数的充要条件是对任意xi属于X,i=1,2,... ,m,  K(x,z)对应的Gram矩阵是半正定矩阵。

    gram矩阵详细解释请参见博客:https://blog.csdn.net/zl3090/article/details/83089384

    半正定矩阵参考博客:https://blog.csdn.net/asd136912/article/details/79146151

    正定核函数的等价定义:设X包含于R^n,K(x,z)为定义在X*X上的对称函数,如果对任意xi属于X,i=1,2,... ,m,  K(x,z)对应的Gram矩阵是半正定矩阵,则称K(x,z)是正定核。

(3)常用核函数

(a)多项式核函数(polynomial kernel function

    

    对应的支持向量机是一个P次多项式分类器,在此情形下,分类决策函数成为

    

 (b)高斯核函数(Gaussian kernel  function)

    

    对应的支持向量机是一个高斯径向基函数( radial basis function )分类器,在此情形下,分类决策函数成为

    

(c)字符串核函数(string kernel function)

    核函数不仅可以定义在欧氏空间上,还可以定义在离散数据的集合上。比如,字符串核是定义在字符串集合上的核函数。

两个字符串s和t上的字符串核函数是基于映射的特征空间中的内积。

    字符串核函数气kn(s, t)给出了字符串s和t中长度等于n的所有子串组成的特征向量的余弦相似度(cosine similuity)。直观上,两个字符串相同的子串越多,它们就越相似,字符串核函数的值就越大。字符串核函数可以由动态规划快速地计算。

(4)非线性支持向量分类机

    综上所述,利用核技巧,可以将线性分类的学习方法运用于非线性分类问题,只需将线性支持向量机对偶形式中的内积换位核函数。

    非线性支持向量机:从非线性分类训练集,通过核函数与软间隔最大化,或凸二次规划,学习得到的分类决策函数称为非线性支持向量,K(x,z)是正定核函数。

    非线性支持向量机学习算法描述如下:

    

4. 序列最小优化算法

    该部分解决的是当训练样本容量很大时,凸二次规划问题计算的低效问题,主要介绍提高支持向量机学习效率算法中的序列最小优化算法(SMO)。

    SMO算法要解如下凸二次规划的对偶问题:

    

    SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件(Karush-Kuhn-Tucker conditions),那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。

    整个SMO算法包括两个部分:求解两个变量二次规划的解析方法和选择变量的启发式方法。

(1)两个变量二次规划的求解方法

    不失一般性,假设选择的两个变量是α1,α2,其他变量αi (i=3,4, ..., N)是固定的。SMO的最优化问题的子问题可以写成:

   

   

    为了求解上述问题,首先分析约束条件,然后再此约束条件下求极小。

    由于只有两个变量α1,α2,约束可以用二维空间中的图形表示:

    

    不等式约束使α1,α2在盒子[0,C]*[0,C]内,等式约束使α1,α2在平行于盒子对角线的直线上。因此要求的是目标函数在一条平行于对角线段上饿最优值,这使得两个变量的最优化问题成为实质上的单变量最优化问题。

    假设初始可行解为α1old和α2old,最优解为α1new和α2new,满足

    其中,L与H是a2new所在的对角线段端点的界

    如果y1 ≠ y2,如上图左图所示,

    如果y1 = y2,如上图右图所示,

    根据约束条件,有

    引入记号,

    令,

    

    代入到最优化问题中,有

    这样,通过对W进行求导可以得到。

    定理: 最优化问题沿着约束方向未经剪辑时的解是,其中

 经剪辑后的解是

(2)变量的选择方法

    第1个变量的选择

    SMO称选择第1个变量的过程为外层循环。外层循环在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量。具体地,检验训练样本点(xi,yi)是否满足KKT条件,即:

    

    

其中,

    该检验是在ε范围内进行的。在检验过程中,外层循环首先遍历所有满足条件的样本点,即在间隔边界上的支持向量点,检验它们是否满足KKT条件。如果这些样本点都满足KKT条件,那么遍历整个训练集,检验它们是否满足KKT条件。

    第2个变量的选择:

    SMO称选择第2个变量的过程为内层循环。假设在外层循环中已经找到第1个变量α1,现在要在内层循环中找第2个变量α2。第2个变量选择的标准是希望使α2有足够大的变化。

    由定理可知α2是依赖于|E1-E2|的,为了加快计算速度,一种简单的做法是选择α2使其对应的|E1-E2|最大。因为α1已定,E1也确定了。如果E1是正的,那么选择最小的Ei作为E2;如果E1是负的,那么选择最大的Ei作为E2。在特殊情况下,如果内层循环通过以上方法选择的α2不能使目标函数有足够的下降,那么采用以下启发式规则继续选择α2。遍历在间隔边界上的支持向量点,依次将其对应的变量作为α2试用,直到目标函数有足够的下降。若找不到合适的α2,那么遍历训练数据集;若仍找不到合适的α2,则放弃第1个α1,再通过外层循环寻求另外的α1。

    计算阈值b和差值Ei

    由变量选择的检验条件可得,

    如果

    则:

    如果

    则: 

    如果α1new和α2new同时满足条件那么。如果α1new和α2new是0或者C,那么b1new和b2new以及它们之间的数都是符合KKT条件的阈值,这时选择它们的中点作为bnew。

    Ei值的更新要用到bnew值,以及所有支持向量对应的aj:

    其中S是所有支持向量xj的集合。

    SMO算法描述如下:

    

    

猜你喜欢

转载自blog.csdn.net/zl3090/article/details/83036182
今日推荐