A glimpse of Support Vector Machine

 

    支持向量机(support vector machine, 如下简称svm)是机器学习里的重要方法,特别适用于中小型样本、非线性、高维的分类和回归问题。本篇但愿在正篇提供一个svm的简明阐述,附录则提供一些其余内容。算法

 

 

 

 

 

1、原理概述

 

机器学习的一大任务就是分类(Classification)。以下图所示,假设一个二分类问题,给定一个数据集,里面全部的数据都事先被标记为两类,能很容易找到一个超平面(hyperplane)将其完美分类。机器学习

 

 

 

    然而实际上能够找到无数个超平面将这两类分开,那么哪个超平面是效果最好的呢?ide

 

 

    要回答这个问题,首先就要定义什么叫作“效果好”?在面临机器学习问题的时候广泛不是很关心训练数据的分类正确与否,而是关心一个新数据出现的时候其可否被模型正确分类。举个上学的例子(这里主要指理科),训练数据就像是平时的做业和小测验+答案,新数据则像是期末大考或中高考。做业和小测验有答案的帮助下作得很好,咱们天然很高兴,但扪心自问,作做业和小测验的目的是为了在这之中取得好成绩吗?其实本质上不是的,做业和小测验的目的是为了训练咱们的“大脑模型”,以备在期末大考和中高考中取得好成绩,继而走上人生巅峰。因此在作做业和小测验的时候,重要的是训练一种解题的思路,使之充分熟练进而能触类旁通,在真正的大考中灵活地运用这些思路得到好成绩。此类状况用机器学习的说法就是这种“大脑模型”有较好的泛化能力,而相应的“过拟合”则指的是平时作题都会,一到关键大考就掉链子的行为。形成此类“过拟合”的缘由当然有不少种,但其中之一恐怕就是平时不训练清楚思路、总是死记硬背、以致把答案中的“噪音”也学进去了。函数

 

    因此在上述二分类问题中,若是新数据被分类的准确率高,能够认为是“效果好”,或者说有较好的泛化能力。所以这里的问题就转化为:上图中哪个超平面对新数据的分类准确率最高?学习

 

    然而使人沮丧的是,没人能确切地回答哪一个超平面最好,由于没人能把真实世界中的全部数据都拿过来测试。从广义上来讲,大部分的理论研究都是对真实状况的模拟,譬如咱们用人均收入来衡量一个国家的人民生活水平,这里的人均收入甚至只是一个不太接近的近似,由于不可能把每一个国家中全部人的收入都拿出来一一比较。咱们的大脑善于把繁琐的细节组合起来并高度抽象化,造成模型和假设,来逼近真实状况。测试

 

    因此,在这个问题上咱们能作的,也只有提出假设,创建模型,验证假设。而在svm中,这个假设就是:拥有最大间隔的超平面效果最好。优化

 

    间隔(margin)指的是全部数据点中到这个超平面的最小距离。以下图所示,实线为超平面,虚线为间隔边界,黑色箭头为间隔,即虚线上的点到超平面的距离。能够看出,虚线上的三个点(2蓝1红)到超平面的距离都是同样的,实际上只有这三个点共同决定了超平面的位置,于是它们被称为“支持向量(support vectors)”,而“支持向量机”也由此而得名。ui

 

 

    因而咱们来到了svm的核心思想 —— 寻找一个超平面,使其到数据点的间隔最大。缘由主要是这样的超平面分类结果较为稳健(robust),对于最难分的数据点(即离超平面最近的点)也能有足够大的确信度将它们分开,于是泛化到新数据点效果较好。spa

 

 

    好比上左图的红线和紫线虽然能将两类数据完美分类,但注意到这两个超平面自己很是靠近数据点。以紫线为例,圆点为测试数据,其正确分类为蓝色,但由于超平面到数据点的间隔太近,以致于被错分红了黄色。 而上右图中由于间隔较大,圆点即便比全部蓝点更靠近超平面,最终也能被正确分类。blog

 

 

 

2、间隔最大化与优化问题(线性可分类svm)

 

 

定义超平面:

假设二分类问题中正类的标签为+1,负类的标签为 -1,若要找到一个超平面能正确分类全部样本点点,且全部样本点都位于间隔边界上或间隔边界外侧(如上图所示),

则知足 ,

该式也可写为:

上图中距离超平面最近的三个点(即支持向量)知足 |wTx+b| = 1,又由样本空间任意点x到超平面的距离:, 所以全部数据点的最小间隔为

 

由于咱们的目标是间隔最大化,所以问题转化为:

 

上述优化问题的解为间隔最大时的w和b,随便可求出超平面 

 

为后面解优化问题方便,上式可重写为:

 

 

这是一个凸二次规划(convex quadratic programming)问题,能够用现成的软件包计算。然而现实中通常采用对偶算法(dual algorithm),经过求解原始问题(primal problem)的对偶问题(dual problem),来得到原始问题(primal problem)的最优解。这样作的优势,一是对偶问题每每更容易求解,二是能天然地引入核函数,进而高效的解决高维非线性分类问题。

 

 

 

3、对偶问题

1. 拉格朗日乘子法(lagrange multipliers method)

 

拉格朗日乘子法的主要思想是将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。下面阐述其原理 :

 

考虑一个“原始问题”:

 

 

其中w为优化变量,为了解这个问题,引入广义拉格朗日函数:

 

 

ɑi和βi为拉格朗日乘子,ɑi ≥0,考虑下式:

 

 

这里的下标P意为原始问题(primal problem),若w违反了一些原始问题的约束条件(即存在某个i,使得gi(w) > 0 或 hi(w) ≠ 0),那么就有

 

 

 

因而,

 

于是极小化问题    与“原始问题”就是等价的,由于只有当w知足原始优化条件时,。为了方便,定义原始问题的最优值为

 

 

接下来考虑“对偶问题”,定义:

 

 

这里的下标D意为对偶(dual),接着考虑其极大化问题:

 

 

该式称为原始问题的对偶问题,定义其最优值为 

 

原始问题和对偶问题的关系能够用下式表示:

 

 

若要知足强对偶性(strong duality),即 ,则需知足Slater条件: f(w)和g(w)都是凸函数,h(w)是仿射函数,而且存在w使得全部的不等式约束g(w)<0成立。

 

另外由于有不等式约束,  需知足下列Karush-Kuhn-Tucker (KKT)条件 :

 

 

 

这时原始问题和对偶问题的最优解相同,可用解对偶问题替代解原始问题。

 

 

2. 对偶问题求解

在svm中咱们的原始问题:

  

由拉格朗日乘子法,为每条约束引进拉格朗日乘子αi ≥ 0,该问题的拉格朗日函数变为:

 

原始问题的对偶问题为:。依据KKT条件,先固定ɑ,令L(w, b, α)对w和b的偏导为0可得,

,  

 

将上两式代入拉格朗日函数,便可得对偶问题的新形式:

 

 

求出上式中的α后,便可求得原始问题中的w和b。

 

 

 

   

 

因而分离超平面就是:      

 

 

在w和b的求解公式中,注意到w和b由对应于α> 0的样本点(xi,yi)决定,又由KKT条件中:αi (yi(w•xi+b)-1)=0  ,  yi(w•xi+b)= ±1,所以这些样本点(xi,yi)必定在间隔边界上,它们就是“支持向量”,这些点共同决定了分离超平面。

 

 

 

4、软间隔最大化(线性不可分类svm)

 

上一节求解出来的间隔被称为“硬间隔(hard margin)“,其能够将全部样本点划分正确且都在间隔边界以外,即全部样本点都知足

 

但硬间隔有两个缺点:1. 不适用于线性不可分数据集。 2. 对离群点(outlier)敏感。

好比下图就没法找到一个超平面将蓝点和紫点彻底分开:

 

下图显示加入了一个离群点后,超平面发生了很大的变更,最后造成的间隔变得很小,这样最终的泛化效果可能不会太好。

 

 

为了缓解这些问题,引入了“软间隔(soft margin)”,即容许一些样本点跨越间隔边界甚至是超平面。以下图中一些离群点就跨过了间隔边界。

 

因而为每一个样本点引入松弛变量 ,优化问题变为:

 

 

由上式能够看出:

1. 离群点的松弛变量值越大,点就离得越远。

2. 全部没离群的点松弛变量都等于0,即这些点都知足

3. C > 0 被称为惩罚参数,即为scikit-learn中的svm超参数C。当C设的越大,意味着对离群点的惩罚就越大,最终就会有较少的点跨过间隔边界,模型也会变得复杂。而C设的越小,则较多的点会跨过间隔边界,最终造成的模型较为平滑。

 

上述优化问题一样可以使用拉格朗日乘子法:

 

 

运用和上一节一样的方法,分别对w,b, 求偏导,获得对偶问题:

 

 

求出上式中的α后,便可求得原始问题中的w和b,进而得到分离超平面。

 

 

 

5、核函数(非线性svm)

 

前几节展现的硬间隔和软间隔svm主要是用于处理线性分类问题,然而现实中不少分类问题是非线性的,以下图所示,不管怎样一个线性超平面都没法很好地将样本点分类:

 

 

因此在此引入核函数(kernel function),构造非线性svm,以下图所示,左图使用的是多项式核函数,右图使用的是高斯核函数,两者均能将样本点很好地分类:

 

 

核函数的主要做用是将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。下图显示原来在二维空间不可分的两类样本点,在映射到三维空间后变为线性可分 :

 

 

但回到原来的二维空间中,决策边界就变成非线性的了:

 

 

核函数是如何将原始空间映射到高维的特征空间的? 下面先举个例子:

假设作一个2维到3维的映射,

 

   , 求  和  的内积:

 

 

 

能够看出转换后向量的内积等于原向量内积的平方,即 

 

函数被称为二次多项核函数,因而若是想计算高维特征空间的内积 ,咱们只需计算核函数,即原向量内积的平方  

就能够了。这样作的好处有:

 

  • 将样本点由原始空间映射到高维空间后,有很大可能使原来线性不可分的问题变为线性可分。
  • 核函数的计算是在低维特征空间计算的,它避免了在高维特征空间下计算内积的超高计算量。好比多项式核函数
    映射后的特征维度为   , 其中p为原始空间维度。这样映射后的高维维度会随着原始空间的维度增长而呈指数型增加,另外像高斯核函数   甚至能够将原始空间映射到无穷维,那就无法计算了。

     

 

下图也能看出在原始空间和高维空间下计算量的巨大差别:

 

 

 

 

 

在上一节中,最后的对偶问题为:  

 将原始空间映射到高维特征空间后变为:

 

 直接计算 比较复杂,所以若能找到一个核函数 ,则最后变为:

 

 

求解后的分离超平面为:

 

这样咱们就能以较小的计算量解决非线性分类问题,甚至都不须要知道低维空间的数据是怎样映射到高维空间的,只须要在原来的低维空间计算核函数就好了。

 

 

几种经常使用的核函数:

 

 

因为高斯核函数是目前最主流的核函数,因此在这里以其举例介绍:

 

高斯核(Gaussian Kernel) 属于径向基函数(Radial Basis Function , RBF)的一种。其表达式  

也可写为 ,范围为(0,1],其中

 

高斯核函数可理解为两个样本点的类似程度,两点(x, x’)的距离  越大,越小,则两个点的类似程度很小,这意味着高斯核具备“局部(local)”特征,只有相对邻近的样本点会对测试点的分类产生较大做用。 ,即为scikit-learn中的svm超参数 γγ 越大,意味着两个点只有至关接近时才会被判为类似,这样决策边界会变得较为扭曲,容易过拟合,由于只取决于较少的几个样本点。相反,γ 越小,大量的点被判为近似,于是致使模型变得简单,容易欠拟合。

 

 

 

6、Hinge Loss

 

线性svm还有另外一种解释方法,能揭示出其与其余分类方法(如Logistic Regression)的渊源。线性svm的原始最优化问题:

 

  可重写为:    

 

 

[1-y(wx+b)]+ 也可写为 max(0, 1-y((wx+b)),该损失函数被称为Hinge Loss。

若将式中 [1-y(wx+b)]+ 替换为对率损失(logistic loss): log[1+exp(-y(wx+b))],则成为了Logistic Regression的损失函数。下图显示出两者的关系:

 

 

也便是说,对于svm的hinge loss而言,若是样本点被正确分类且在间隔边界以外,即wx + b >1,则[1-y(wx+b)] +=0,损失为0。若样本点即便被正确分类,但位于超平面和间隔边界之间,意味着分类正确的确信度不够高,于是损失不为0。而对于logistic regression来讲,全部的样本点都会有损失,由于其损失函数

log[1+exp(-y(wx+b))] 始终不为0,但当样本点远离其决策边界时,损失就会变得很是接近0。

 

 

 

 

 

 

附录1、点到超平面的距离

 

第二节中提到样本空间任意点x到超平面的距离为:,下面给出证实:

 

上图中超平面为: ,假设x1和x2都在超平面上,则有 wTx1+b = wTx2+b, wT(x1-x2)=0,即法向量w与超平面上任意向量正交。

B点为A点到超平面的投影, 为垂直于超平面的单位向量,γ为A到超平面的算术距离,A点为 x(i),则B点为  ,代入 得:

 

 

 

 

附录2、SMO算法

不管是线性仍是非线性svm,最后都要归结为求拉格朗日乘子α的问题。

 

 

能够用通用的二次规划算法求解,但现实中当训练样本容量很大时,每每求解很是低效。因此本节介绍的SMO(sequential minimal optimization)算法就是高效求解上述问题的算法之一。

 

SMO算法的基本思路是:选择两个变量α1和α2,固定其余全部α,针对这两个变量构建二次规划问题,这样就比原来复杂的优化问题简化不少。因为有约束条件  ,固定了其余α后,可得 。因此α1肯定后,α2便可自动得到,该问题中的两个变量会同时更新,再不断选取新的变量进行优化。

 

SMO采用启发式的变量选择方法:第1个变量α1,通常选择训练样本中违反KKT条件最严重的样本点所对应的α。而第2个变量α2则选取与α1的样本点之间间隔最大的样本点对应的α,这样两者的更新每每会给目标函数带来更大的变化。

 

下面来看如何解α1和α2

因为其余变量αi (i=3,4…N)都是固定的,因此有 ,其中为常数。又有约束 ,且y1,y2只能取值+1或-1,因此α1,α2的直线平行于[0,C]×[0,C]造成的对角线。

 

 

这里采用迭代法,假设上一轮迭代获得的解是α1old和α2old,沿着约束方向未经剪辑时α2的最优解为α2new, unclipped。本轮迭代完成后的解为α1new 和 α2new

 

以上左图为例,假设要求α2的最小值,令α1等于0,由α12 =k,

则α2new = -k = α2old 1old。但由于α2new必须在[0,C],若α2old 1old <0,则α2new 必须等于0,所以α2new的下界 L=max(0, α2old 1old)。

同理,上界H = min(C, C+α2old 1old)。

则:     

 

再由  便可求得α1new,这样α1和α2就同时获得了更新。

 

 

 

附录3、svm库的使用和计算复杂度

如正片中所述,scikit-learn中svm库的两个主要超参数为C和γ,C和γ越大,则模型趋于复杂,容易过拟合;反之,C和γ越大,模型变得简单,以下图所示:

 

 

 

LibSVM的做者,国立台湾大学的林智仁教授在其一篇小文(A Practical Guide to Support Vector Classification)中提出了svm库的通常使用流程 :

 

其中第二步scaling对于svm的总体效果有重大影响。主要缘由为在没有进行scaling的状况下,数值范围大的特征会产生较大的影响,进而影响模型效果。

 

第三步中认为应优先试验RBF核,一般效果比较好。但他同时也提到,RBF核并非万能的,在一些状况下线性核更加适用。当特征数很是多,或者样本数远小于特征数时,使用线性核已然足够,映射到高维空间做用不大,并且只要对C进行调参便可。虽然理论上高斯核的效果不会差于线性核,但高斯核须要更多轮的调参。

 

并且当样本量很是大时,线性核的效率要远高于其余核函数,在实际问题中这一点可能变得很是重要。scikit-learn的LinearSVC库计算量和样本数线性相关,时间复杂度约为O(m× n),而SVC库的时间复杂度约为O(m2×n)到O(m3×n),当样本量很大时训练速度会变得很慢,所以使用非线性核的svm不大适合样本量很是大的情景。下表总结了scikit-learn中的svm分类库:

 

 

 

 

 

Reference

[1] 周志华.《机器学习》

[2] 李航.《统计学习方法》

[3] Andrew Ng. cs229 Lecture notes 3

[4] Hastie, etc. An Introduction to Statistical Learning

[5] Aurélien Géron. Hands-On Machine Learning with Scikit-Learn&TensorFlow

[6] Andrew W. Moore. Support Vector Machines

[7] Pang-Ning Tan, etc. Introduction to Data Mining

[8] Chih-Jen Lin, etc. A Practical Guide to Support Vector Classification

[9] Wikipedia, Lagrange multiplier

[10] Wikipedia, Radial basis function kernel

 

 

/

相关文章
相关标签/搜索