机器学习笔记(五):支持向量机(SVM)

支持向量机是目前机器学习的众多算法中使用得最为广泛的算法之一,本文主要介绍支持向量机的概念与原理。

目录

  • 什么是支持向量机
  • 硬间隔线性支持向量机
  • 软间隔线性支持向量机
  • 非线性支持向量机

 

 

一、什么是支持向量机

  支持向量机(Support Vector Machine,简称SVM)是一种用来解决二分类问题的机器学习算法,它通过在样本空间中找到一个划分超平面,将不同类别的样本分开,同时使得两个点集到此平面的最小距离最大,两个点集中的边缘点到此平面的距离最大。如下图所示,图中有方形和圆形两类样本,支持向量机的目标就是找到一条直线,将圆形和方形分开,同时所有圆形和方形到这条直线的距离加起来的值最大。

上图中直线H和直线H3都可以将两类样本分开,但所有点到H的距离之和更大,所以H更适合我们的分类任务,距离H最近的几个样本点叫做支持向量。之所以选择距离最大的超平面是因为距离最大的超平面具有最好的泛化性能。

上面讨论的情况是一种理想中的情况,两个类别的样本之间存在着清晰的划分超平面,但我们在实际工作中处理的任务上并不一定都是这种清晰线性可分的,对于这种清晰线性可分的任务,我们学习一个线性分类器,也称为硬间隔支持向量机;当训练数据数据近似线性可分时,也学习一个线性的分类器,即软间隔支持向量机;当训练数据线性不可分时,我们可以通过使用核技巧及软间隔最大化,学习非线性支持向量机

下面我们本着由简到繁的原则,对这三种支持向量机分别进行介绍。

 

二、硬间隔支持向量机

   现有一个清晰线性可分的训练样本集D={(x1,y1),(x2,y2),…,(xm,ym)} yi∈{+1,−1}(i表示第i个样本,m表示样本容量),则划分超平面可通过如下线性方程来描述:

https://img-blog.csdn.net/20131107201104906

其中W为法向量,决定了超平面的方向;b为位移项,决定了超平面与原点之间的距离。显然,划分超平面可被法向量w和位移b确定,下面我们将其记为(w,b)。样本空间中任意点x到超平面(w,b)的距离可写为

假设超平面能将训练样本正确分类,则令对于(xi,yi)有

如上图所示,距离超平面最近的几个训练样本点使上式的等号成立,它们被称为“支持向量”,两个异类支持向量到超平面的距离之和为

为使r最大,则w需取最小,所以求r的最大值等价于求下式的最小值

这是一个凸函数,故局部极小值就是全局最小值

对上式添加约束再利用拉格朗日乘子法求解更高效

令上式对w和b的偏导为零可得

将上面两式代入L(w,b,a),即可将w和b消去,可得到

解出α后,求出w和b即可得到模型

因为上述过程满足KKT条件(详细可参考这篇博客:https://blog.csdn.net/qq_38517310/article/details/79494934),故可得

由于凸函数局部极值就是全局最值,当我们取到最小值时还有

这表明,对于任意训练样本(xi,yi),总有αi=0或

若αi=0,则该样本不会在

的求和中出现,也就不会对f(x)有任何影响;若αi>0,则必有,所对应的样本点位于最大间隔边界上,是一个支持向量,这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。

 

接下来,我们来求解α,即最小化下式

不难发现,这是一个二次规划问题,可以使用通用的二次规划算法来求解,然而,该问题的规模正比于训练样本数(因为向量α的维数等于训练样本数),这会在实际问题中造成很大的开销。为了避开这个障碍,人们利用问题本身的特性,提出了许多高效的算法,序列最小最优化(sequential minimal optimization,SMO)是其中一个著名的代表。

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

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

注意到只需选取的αi和αj有一个不满足KKT条件,目标函数就会在迭代后增大。直观上来看,KKT条件违背的程度越大,则变量更新后可能导致的目标函数值增幅越大。于是SMO先选取违背KKT条件程度最大的变量。第二个变量应选择一个使目标函数值增长最快的变量,但由于比较各变量所对应的目标函数值增幅的复杂度过高,因此SMO采用了一个启发式:使选取的两变量所对应样本之间的间隔最大。一种直观的解释是,这样的两个变量有很大的差别,与对两个相似的变量进行更新相比,对它们进行更新会带给目标函数值更大的变化。

  关于SMO算法的更加详细介绍以后有需要的话我再写一篇文章进行梳理,这里我们只需要知道根据SMO算法最终可以解出α,然后将α代入下式

可以解出w,然后根据任意支持向量(xi,yi)都有

(其中S为支持向量的下标集)可以解出b

至此,划分超平面https://img-blog.csdn.net/20131107201104906已被我们解出。

 

三、软间隔支持向量机

  上一章讨论的硬间隔线性支持向量机是用来解决训练数据完全线性可分情况的算法,但由于我们实际获取的真实样本往往会存在噪声,使得训练数据不是清晰线性可分的,又或者即使我们找到了一个可以使不同类样本完全分开的超平面,也很难确定这个线性可分的结果是不是由于过拟合导致的,比如下图的情况,为此引入了“软间隔”(soft margin)的概念。

具体来说,硬间隔支持向量机要求所有的样本均被最佳超平面正确划分,而软间隔支持向量机允许某些样本点不满足间隔大于等于1的条件,当然在最大化间隔的时候也要限制不满足间隔大于等于1的样本的个数使之尽可能的少。于是我们引入一个惩罚系数C>0,并对每个样本点(xi,yi)引入一个松弛变量(slack variables)ξ≥0,此时可将上一章中的求解

改写为

上式中约束条件改为

表示间隔加上松弛变量大于等于1. 优化目标改为

表示对每个松弛变量都要有一个代价损失Cξi,C越大对误分类的

惩罚越大,C越小对误分类的惩罚越小。

上式是软间隔支持向量机的原始问题。可以证明w的解是唯一的,b的解不是唯一的,b的解是在一个区间内。假设求解软间隔支持向量机间隔最大化问题得到的最佳超平面是https://img-blog.csdn.net/20131107201104906,对应的分类决策函数为

f(x)称为软间隔支持向量机

接下来我们用和求解硬间隔支持向量机同样的方法来对软间隔支持向量机求解,由于在上一章详细介绍过思路,这里只列出数学式子。

令L分别对w、b、ξ求偏导,并令偏导数等于0,得

将上式代入得到

对比软间隔支持向量机的对偶问题和硬间隔支持向量机的对偶问题可发现二者的唯一差别就在于对偶变量的约束不同,软间隔支持向量机对对偶变量的约束是0≤αi≤C,硬间隔支持向量机对对偶变量的约束是0≤αi,于是可采用和硬间隔支持向量机相同的解法求解。

对于软间隔支持向量机,KKT条件要求:

同硬间隔支持向量机类似,对任意训练样本(xi→,yi),总有αi=0或yi(wx+b)−1+ξi=0,若αi=0,则该样本不会对最佳决策面有任何影响;若αi>0则必有yi(wx+b)=1−ξi,也就是说该样本是支持向量。若αi<C则μi>0进而有ξi=0,即该样本处在最大间隔边界上;若αi=C则μi=0此时如果ξi≤1则该样本处于最大间隔内部,如果ξi>1则该样本处于最大间隔外部即被分错了。由此也可看出,软间隔支持向量机的最终模型仅与支持向量有关。

 

四、非线性支持向量机

在讨论了训练样本近似线性可分的情况后,我们再来看看原始样本空间中不存在一个能正确划分两类样本的超平面的情况,如下图左边的情况所示。

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543475110002&di=ba42e64c80e27dbc3108617d860084fa&imgtype=jpg&src=http%3A%2F%2Fimg0.imgtn.bdimg.com%2Fit%2Fu%3D1772634595%2C4004826352%26fm%3D214%26gp%3D0.jpg

对于这样的问题可以通过将样本从原始空间映射到特征空间使得样本在映射后的特征空间里线性可分。例如对上图中左边的样本做特征映射可得到上图右边所示的样本分布,这样就很好进行线性划分了。

  上面的例子说明,用线性分类的方法求解非线性分类问题分为两步:

首先使用一个变换将原空间的数据映射到新空间;

然后在新空间里用线性分类学习方法从训练数据中学习分类模型。

令x表示原空间的数据,ф(x)表示将x映射后的特征向量,于是在特征空间中划分超平面所对应的模型可表示为

我们同样可以用第二章中的方法对其求解,可将其化为

求解上式涉及到计算,这是样本xi和xj映射到特征空间之后的內积。由于特征空间维数可能很高,因此直接计算通常是非常困难的。为了避开这个障碍,可以设想这样一个函数:

即xi与xj在特征空间的內积等于它们在原始样本空间中通过函数k(.,.)计算的结果。这样我们在求解时的计算就会变得简单些,这里的函数K(.,.)就是“核函数”(kernel function)。

  显然,若已知合适映射ф(.)的具体形式,则可写出核函数k(.,.)。但是在现实任务中我们通常不知道ф(.)是什么形式,所以很难找出精确的k(.,.),但我们有一些常用的核函数,当无法找出ф(.)时,我们会选用这些常用的核函数来进行支持向量机的构造。需要注意的是,核函数选择的不同,代表将样本映射到了不同的特征空间,因此选择不合适的核函数与选择合适的函数相比可能会导致性能上的巨大差异。

 

参考文献

  1. 李航,《统计学习方法》
  2. 周志华,《机器学习》
  3. GarryLau,https://blog.csdn.net/liugan528/article/details/79448379

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_35771020/article/details/84632432