西瓜书第六章——支持向量机

引言:支持向量机可以说是数学推导过程最复杂的算法了吧。支持向量机分为硬间隔SVM、软间隔SVM以及核函数SVM。其中硬间隔支持向量机是严格将样本进行分类处理,软间隔SVM则允许部分样本分类错误。SVM有三宝:间隔、对偶及核技巧。

接下来我将按照西瓜书的脉络,来梳理支持向量机的原理及在sklearn中的部分实现过程及相关参数。


1.1 间隔和支持向量

       给定训练集样本,分类学习最基本的思想就是基本训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开。

        支持向量机是一种以结构风险和经验风险最大化的机器学习算法。(其中经验风险是指让训练集泛化误差减小,结构风险在这里指的是让间隔最大化)。

        在样本空间中,划分超平面(超平面比特征维度少一维)可以用下面的线性方程来描述:

         其中w=(w1;w2;....;wd)为法向量,决定了超平面的方向;b为位移项,决定了超平面与原点之间的距离。样本空间中任意点x到超平面的距离可以写成:

         令:

          可以看出,距离超平面最近的几个点能使上式等号成立,这几个点被称为“支持向量”,在支持向量机中,真正其作用的便是这几个支持向量,具体原理下面会详细说明。

        两个异类支持向量到超平面的距离之和为:

         我们要做的便是将这个“间隔”最大化,即:

        也可以写成:

        这也是支持向量机的基本形式。

6.2 对偶问题

         在得到SVM的基本形式之后,接下来便求解这个式子。可以看出,上式为一个带有不等式约束的问题,为了方便计算,我们利用拉格朗日乘子法将其转化为无约束问题,拉格朗日函数如下(其中αi为拉格朗日乘子):

        可以看出,拉格朗日函数分为两部分,第一部分和我们原始的损失函数一样,第二部分呈现了我们带有不等式的约束条件(其实是经验风险),我们先以α为参数,求解上式的最大值,再以w和b为参数求解其最小值,因此,我们的目标可以写成:

         可以这样理解,当yi(wTxi+b)>1时,若要最大化该函数,α只能取到0。

        若yi(wTxi+b)<1时,若要最大化该函数,则α可以取到正无穷。但是函数第二项接近正无穷时,该函数不论w,b取到什么值,都不可能有最小值出现。

        可以看成,该函数对于初始的样本进行筛选,惩罚yi(wTxi+b)<1的样本,因此函数必须满足这个不等式约束条件。也就是过滤掉了分类错误的情况,使得模型在求解最小值的同时满足了约束条件。

        实践证明,如果我们直接对拉格朗日函数进行求导求解参数的话,是无法求解出来的。因此,我们将其转化成一种只带有 α ,而不含w和b的式子,这种形式也就是拉格朗日对偶函数。

        并不是所有的函数都可以任意的转化成对偶函数的,需要满足KTT条件

         首先必须所有参数的一阶导数为0(这里的参数只有w和b),其次,不等式约束应写成小于的形式,拉格朗日因子应大于0,最后一个条件成为松弛互补条件,即约束条件乘以拉格朗日因子必须等于0(这些条件是通过强对偶关系推导出来的,这里就不详细说明啦)。

        将KKT条件应用于本场景,可以得到条件为:

         直观来看,第三个条件表明:当样本点满足yi(wTxi+b)-1=0时,该样本落在(wTxi+b)=1/-1的线上,这些样本点即支持向量,此时的 α >0;而那些未落在决策边界上的样本,其 α 均为0,这表明这些样本在计算过程中不起作用。因此,SVM算法的求解过程仅和支持向量有关。

         转化后的对偶函数如下:

         接下来对该函数求导,并用α来表示w和b,最终得到我们的目标函数为:

         可以看出,这是一个二次规划问题,求解该函数的方法有多种,其中SMO算法是一个著名的代表(知道有这个就好了,我也不太清楚原理)。

6.3 核函数

       在前面的讨论中,我们均假设样本是线性可分的,然后在实际任务中,常会遇到非线性可分的样本集,例如异或问题。对于这样的问题,我们可将数据从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间中线性可分。 

        令φx为将x映射后的特征向量,如此,非线性SVM的损失函数的初始形态可以表示为:

         其拉格朗日函数及对偶函数为:

        最终的决策函数为:

         可以看出,对偶函数在求解过程中会涉及到φ(xi)Tφ(xj),这是样本xi和样本xj映射到特征空间之后的内积。由于特征空间的维数可能很高,因此直接计算两者的内积是十分困难的。为了解决这一问题,我们采用“核技巧”。这是一种能够使用数据原始空间中的向量计算来表示升维后的空间中的点积结果的数学方式。具体表示为:

         其中K(xi,xj)称为核函数。有了核函数之后,我们便不用去关注φ究竟是什么,高维空间中任意两个向量的点积一定可以被低维空间中的这两个向量的某种计算来表示;同时,也能够避免维度诅咒。

        核函数应满足以下两个条件:

  1. 核矩阵应该是半正定的。
  2. 核函数应该是对称函数,即K(xi,xj)=K(xj,xi)。

        我们希望样本在特征空间中线性可分,那么特征空间的好坏对支持向量机的性能至关重要。然而,在实际问题中,我们不知道什么样的核函数是合适的,因此,“核函数选择”成为支持向量机的最大变数,现在也没有形成统一的理论来帮助我们选择。现如今的一些基本经验是:对文本数据通常采用线性核,情况不明时先采用高斯核。

        常用的核函数及在sklearn中涉及到的参数如下:

 

6.4 软间隔与正则化


         关键概念:软间隔与硬间隔

        当两组数据是完全线性可分,我们可以找出一个决策边界使得训练集上的分类误差为0,这两种数据就被称为是存在”硬间隔“的。当两组数据几乎是完全线性可分的,但决策边界在训练集上存在较小的训练误差,这两种数据就被称为是存在“软间隔”。


         在前面的讨论中,我们一直假定训练样本在样本空间中是完全线性可分的,然而在现实任务中很难存在一个确定的超平面使训练样本在特征空间中线性可分,或者就算完全线性可分,也难以判断是否是过拟合的结果。

        因此,为了解决该问题,我们允许支持向量机在一些样本上出错。如下图所示:

         这个时候,我们的决策边界就不是单纯地寻求最大边际了,因为对于软间隔地数据来说,边
际越大被分错的样本也就会越多,因此我们需要找出一个”最大边际“与”被分错的样本数量“之间的平衡。

        因此,我们引入松弛系数ζ来优化我们原始的判别函数:

         可以发现,在将异常的样本点分类正确的同时,也可能会将部分原先分类正确的点分类错误。因此,我们必须在求解最大边际的损失函数中加上一个惩罚项,用来惩罚我们具有巨大松弛系数的决策超平面,现在,我们的优化目标为:

        其中,第二项为折页hinge损失函数。        

也可以写成:

         其中C>0,是用来控制惩罚项的成大力度的系数,若C值设置的比较大,表示对样本分类错误的惩罚越重,支持向量分类便会选择边际较小的,能够更好的分类所有的训练点的决策边际,不过模型的训练时间也会增加;若C的设定值较小,那么支持向量分类便会尽量最大化边界,决策功能会更简单,但同时模型的准确度可能会下降。

        换句话说,C在SVM中的影响就像正则化参数对逻辑回归的影响。

        此时的拉格朗日函数为:

          对偶函数为:


 注:正则化的基本框架如下:

         以支持向量为例,优化目标的第一项用来描述划分超平面的间隔大小,另一项用来表示训练集上的误差,可以写成一般的形式:

         其中,第一项称为“结构风险”,用来描述模型f的某些性质;第二项称为经验风险,用来描述模型与训练集数据的契合程度;C用来平衡两者之间的关系。从某种程度上来说,这种表达形式削减了假设空间,从而降低了最小化训练误差的过拟合风险。因此,第一项又可以称为正则化项,其中Lp范数是常用的正则化项,其中L2范数倾向于让w的分量取值尽可能的均衡,即非零个数尽量稠密;而L1范数倾向于让非零分量个数尽可能的少。


6.4 sklearn中常见参数介绍

  •         导入包:
from sklearn.svm import SVC
  •         常用的属性列表:

  •          常见接口列表:
  •  常用的参数列表:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值