支持向量机SVM

一、支持向量机介绍

支持向量机(Support Vector Machine, SVM)是一类按监督学习方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。SVM使用铰链损失函数(hinge loss)计算经验风险并在求解系统中加入了正则化项以优化结构风险,是一个具有稀疏性和稳健性的分类器  。SVM可以通过核方法进行非线性分类,是常见的核学习方法之一。在人像识别、文本分类等模式识别问题中得到应用。(来自百度百科)

 

二、SVM线性分类器

SVM从线性可分情况下的最优分类面发展而来。最优分类面就是要求分类线不但能将两类正确分开(训练错误率为0),且使分类间隔最大。SVM考虑寻找一个满足分类要求的超平面,并且使训练集中的点距离分类面尽可能的远,也就是寻找一个分类面使它两侧的空白区域(margin)最大。这两类样本中离分类面最近的点且平行于最优分类面的超平面上H1,H2的训练样本就叫做支持向量。如图:

 

 

三、分类间隔

1、为什么要间隔最大呢?

一般来说,一个点距离分离超平面的远近可以表示分类预测的确信度,如图中的A B两个样本点,B点被预测为正类的确信度要大于A点,所以SVM的目标是寻找一个超平面,使得离超平面较近的异类点之间能有更大的间隔,即不必考虑所有样本点,只需让求得的超平面使得离它近的点间隔最大。

只有计算出了间隔,才能使得间隔最大化。

2、那么如何计算最大间隔呢?(拉格朗日函数法)

在样本空间中,划分超平面可通过如下线性方程来描述:,其中w为法向量,决定了超平面的方向,b为位移量,决定了超平面与原点的距离。假设超平面能将训练样本正确地分类,即对于训练样本(xi,yi),满足以下公式:

该公式被称为最大间隔假设,yi=+1 表示样本为正样本,yi=−1 表示样本为负样本,式子前面选择大于等于+1,小于等于-1只是为了计算方便,原则上可以是任意常数,但无论是多少,都可以通过对 w 的变换使其为 +1 和 -1 。该公式等价于:

距离超平面最近的这几个样本点满足,它们被称为“支持向量”。虚线称为边界,两条虚线间的距离称为间隔。

间隔等于两个异类支持向量的差在 W方向上的投影 ,a向量在b向量方向上的投影如下计算:

由:,可以推出,所以间隔为:

SVM的思想是使得间隔最大化,也就是最大化,相当于最小化 ||w||,为了计算方便,将公式转化成如下公式,它即为支持向量机的基本型:,这是一个凸二次规划问题,可以采用拉格朗日乘子法对其对偶问题求解,对偶问题就是当原问题不好求解时,找到拉格朗日函数的对偶问题进行求解,设λ,β分别为拉格朗日函数的等式约束条件的系数和不等式约束条件的系数,原始问题和对偶问题只不过是先优化x, 还是λ,β的问题。

拉格朗日函数为:

对w、b求导得到方程组:

令其等于0得到:

(记为公式1)

将其代入拉格朗日函数中得:

原问题就转换为关于 α 的问题:

解出 α 之后,根据公式1可以求得 w , 进而求得 b,也就得到模型:

(w、b已知,模型就已知)

 

四、非线性支持向量机和核函数

对于非线性问题,线性可分支持向量机并不能有效解决,要使用非线性模型才能很好地分类。例如,使用直线并不能将两类样本分开,但可以使用一条椭圆曲线(非线性模型)将它们分开。 对于这样的问题,可以将训练样本从原始空间映射到一个更高维的空间,使得样本在这个空间中线性可分,如果原始空间维数是有限的,即属性是有限的,那么一定存在一个高维特征空间使样本可分。比如原来在二维空间中一个线性不可分的问题,映射到四维空间后,变成了线性可分的。而转化最关键的部分就在于找到这个映射方法。

若约束函数为:f(x’)=<w’,x’>+b,式中的 w’和x’都是2000维的向量,分类的过程就是求向量x’与向量w’的内积,再把这个内积的值和b相加,就得到了结果,看结果大于阈值还是小于阈值就得到了分类结果。所以只要高维空间里内积的值算出来了,分类结果就算出来了。给了一个w 和x的值,就有一个确定的f(x’)值与其对应。那么是否能有这样一种函数K(w,x),他接受低维空间的输入值,却能算出高维空间的内积值<w’,x’>,这里的函数 κ(xi,xj) 就是核函数。在实际应用中,通常人们会从一些常用的核函数里选择,根据样本数据的不同,选择不同的参数,实际上就得到了不同的核函数,常用的核函数如下:

假设: 函数Ф是一个从低维特征空间到高维特征空间的一个映射,那么如果存在函数K(x,z), 对于任意的低维特征向量x和z,都有:

称函数K(x,z)为核函数(kernal function);

核函数在解决线性不可分问题的时候,采取的方式是:使用低维特征空间上的计算来避免在高维特征空间中向量内积的恐怖计算量;也就是说此时SVM模型可以应用在高维特征空间中数据可线性分割的优点,同时又避免了引入这个高维特征空间恐怖的内积计算量。

本质: 核函数是一个低纬的计算结果,并没有采用低纬到高维的映射。只不过核函数低纬运算的结果等价于映射到高维时向量点积的值。

 

五、几种常见的核函数

1、线性核函数

线性核函数(Linear Kernel): 即原函数,不做映射。

 

2、多项式核函数

多项式核函数(Polynomial Kernel):其中γ、r、d属于超参,需要调参定义;
类似上面的函数,上面的0.8476是调参出来的结果。

 

3、高斯核函数

高斯核函数(Gaussian Kernel):其中γ属于超参,要求大于0,需要调参定义;

高斯核在实际运用中特别多,不仅仅是因为需要调的参数比较少。

最重要的原因是

 

六、线性支持向量机(软间隔支持向量机)与松弛变量

现实中往往很难确定合适的核函数使训练集在特征空间中线性可分,线性不可分意味着某些样本点 (xi,yi) 不能满足间隔大于等于1的条件,样本点落在超平面与边界之间。解决这一问题,可以对每个样本点引入一个松弛变量 ξi≥0,使得间隔加上松弛变量大于等于1,这样约束条件变为:

目标函数变为:

其中 C>0为惩罚参数,该公式包含两层含义:使尽量小即间隔尽量大,同时使误分类点的个数尽量小。

C是调和两者的系数。当C非常大时,ξi必须很小,也就是对分类器要求严格,当C非常小时,ξi大点也没关系,意味着可以容忍更大错误。

 此时,线性支持向量机的学习问题变成凸二次规划问题的求解,目标函数为:

同样使用拉格朗日乘子法求解极值,其对偶问题为:

其中 αi≥0,μi≥0是拉格朗日乘子。令L(w,b,α,ξ,μ)对w,b,ξ的偏导数为0可得如下:

将其代入原式,得到对偶问题:

求解即可。

 

七、SVM中的铰链损失函数(Hinge Loss)

Hinge Loss 是机器学习领域中的一种损失函数,可用于“最大间隔(max-margin)”分类,其最著名的应用是作为SVM的目标函数。 

在二分类情况下公式为: 

其中y是预测值(-1到1之间),t为目标值(1或 -1)。它的含义是,某个样本能够正确分类就可以了,不鼓励分类器过度自信,当样本与分割线的距离超过1时并不会有任何奖励,目的在于使分类器更专注于整体的分类误差。

很多时候我们希望训练的是两个元素之间的相似关系,而非样本的类别得分,公式为:

其中y是正确预测的得分,y′是错误预测的得分,y-y'是预测和真值的差距,margin是一个由自己指定的安全系数。如果 y-y' 小于margin,才有损失,否则损失为0。

我们希望正确预测的得分高于错误预测的得分,且高出一个边界值 margin,换句话说,y越高越好,y′ 越低越好,(y–y′)越大越好,(y′–y)越小越好,但二者得分之差最多为margin就足够了,差距更大并不会有任何奖励。这样设计的目的在于,对单个样本正确分类只要有margin的把握就足够了,更大的把握则不必要,过分注重单个样本的分类效果反而有可能使整体的分类效果变坏。分类器应该更加专注于整体的分类误差。

案例如下:

第一列表示样本真实类别为cat,分类器判断样本为cat的分数为3.2,判断为car的分数为5.1,判断为frog的分数为 -1.7。

hinge loss 计算如下:

这里是让其他两类的分数去减去真实类别的分数,这相当于计算其他类与真实类之间的误差。因为我们希望错误类别的评分低于正确类别的评分,所以这个误差值越小越好。另外,还使用了一个边界值margin,取值为1,为了使训练出的分类器有更大的把握进行正确分类。

 

八、使用SMO算法求解拉格朗日对偶问题

参考地址:https://www.cnblogs.com/pursued-deer/p/7857783.html

SMO(Sequential Minimal Optimization)是针对求解SVM问题的Lagrange对偶问题,一个二次规划式,开发的高效算法。

我们的目标:求解对偶因子 α (α1, α2, ... , αN)

1、目标函数化成二元函数

SMO算法是通过一定的规定选择两个参数进行优化,并固定其余 N - 2 个参数,假如选取优化的参数是 α1, α2 ,固定α3, α4 , .., αN ,对目标函数进行化简成二元函数得:

这里强调一下,式子中的 Kij 是核函数,知道意思就可以,不了解不太影响SMO算法的推导。

2、将二元函数化成一元函数

利用约束条件,将二元函数化成一元函数

约束条件:

   

得到

    

其中 ζ 是一个定值。

让两边同时乘以y1 ,化简得到:

 

将(2)式带入到(1)中可得:

3、对一元函数求极值点

对(3)式求导并等于0,得:

假设求解得到的值,记为α1new 、α2new 优化前的解记为α1old 、α2old ,由约束条件知:

   

得到:

       

再设支持向量机超平面模型为:f (x) = ωTx + b ,  ω = Σ αi yi xi  即 f (xi) 为样本xi 的预测值,yi 表示 xi 的真实值,则令Ei 表示误差值。

      

由于

  

可得:

      

     

将上面的式子(4)(6)(7)带入求导公式中,此时解出的没有考虑到约束条件,先记为  ,得:

带入(5)式子,得:

   

4、求得最终的对偶因子

以上求得的 没考虑约束条件:

clip_image025clip_image027异号时,也就是一个为1,一个为-1时,他们可以表示成一条直线,斜率为1。

 

 横轴是clip_image009[9],纵轴是clip_image012[4]clip_image009[10]clip_image012[5]既要在矩形方框内,也要在直线上,因此 L  <= α2new   <= H

最终得到的值:

再根据  得到 α1new :

   

5、临界情况的求值

对于大部分情况 η = K11 + K22 - 2K12 > 0 ,求解方式如上;但 η <= 0 , α2new 取临界点L或H。

当η<0时,目标函数为凸函数,没有极小值,极值在定义域边界处取得。 
当η=0时,目标函数为单调函数,同样在边界处取极值。 

计算方法:

6、变量选取

(1)对第一个变量的选取

第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT条件的αi作为第一个变量,接着依据相关规则选择第二个变量(见下面分析),对这两个变量采用上述方法进行优化。当遍历完整个样本集后,遍历非边界样本集(0<αi<C)中违反KKT的αi作为第一个变量,同样依据相关规则选择第二个变量,对此两个变量进行优化。当遍历完非边界样本集后,再次回到遍历整个样本集中寻找,即在整个样本集与非边界样本集上来回切换,寻找违反KKT条件的αi作为第一个变量。直到遍历整个样本集后,没有违反KKT条件αi,然后退出。 

KKT条件参考:https://blog.csdn.net/qq_32172681/article/details/97928241

(2)对第二个变量的选取

SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为α1,第二个变量的选择希望能使α2有较大的变化,由于α2是依赖于|E1−E2|,当E1为正时,那么选择最小的Ei作为E2,如果E1为负,选择最大Ei作为E2,通常为每个样本的Ei保存在一个列表中,选择最大的|E1−E2|来近似最大化步长。 

 

 

参考文章地址:

https://blog.csdn.net/qq_35992440/article/details/80987664

https://blog.csdn.net/alvine008/article/details/9097105

https://blog.csdn.net/Pylady/article/details/78855554

https://blog.csdn.net/fendegao/article/details/79968994

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值