数值计算和SVM讲解(下)

来源:互联网 发布:知乎 修改一句话介绍 编辑:程序博客网 时间:2024/06/06 01:19

2.2.1 Original SVM

终于把所有的铺垫介绍完毕,本节开始我们正式进入SVM。

首先我们简单介绍一下朴素SVM,这个“朴素”一词是本人自己加上的。其意旨脱去加上核函数和SMO算法等等其他知识,展现最为“原始”的SVM思想。

根据2.1.2一节,我们知道SVM的基本架构(代价函数等等)与logistic回归统一,区别在于它的焦点在于支持向量这些点上。那么直观而言,我们希望最优超平面能与这些支持向量的距离(指几何距离)最小。

这里便引出了两个知识点:函数间隔 (Functional margin)与几何间隔 (Geometrical margin)。函数间隔我们在2.1.3感知机一节中已经介绍(构建感知机代价函数中,由此可见感知机其实也是SVM的基础之一),其值为yi(wTxi+b)。

在SVM中我认为几何间隔是构建优化模型最直观的感受,函数间隔只是在几何间隔的基础上人为设定的一种定义值,其作用只是辅助前者。所以本文我们着重介绍一下几何间隔。几何间隔,顾名思义相关点到超平面的几何距离。对于一般点到平面的距离,有公式: d=|wTx+b|/ ||w||,其中分子为绝对值,分母为w的L2范数,也即向量w的模。

设支持向量的样本点为(x*,y*),γ作为支持向量到超平面的几何间隔14:

这里写图片描述

对于二者我们有以下的性质:
1.当函数间隔小于0,表示的是误分类的噪声,在感知机一节中我们提到用其来作为误分类样本点的个数,并成为代价函数;在SVM中我们用其作为支持向量样本点与超平面的几何间隔的分子部分;
2. 同倍数扩大或缩小w、b,超平面是不变的,函数距离会同等增减;而几何距离不变,因为点到固定平面的距离是不变的;
3.几何间隔=函数间隔/||w||

接着我们初步定义模型为15(最大化几何间隔):

这里写图片描述

其中我们可以令优化函数的分子(函数间隔)为1。因为上述性质2:假设我们这个优化问题的最优解是w*,b*,那么我们可以总是可以同倍数地调整w*,b*使得函数间隔=1,而此时最优超平面是不变的;则上式转化为16:

这里写图片描述

工程上为了更好求解,我们将目标函数1/||w|| 的最大值转化为求 ||w||平方/2 的最小值。所以上述最终转化为17:
这里写图片描述

最后就是求解部分。为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。这个问题可以用现成的 QP (Quadratic Programming)优化包进行求解。

好的,暂停一下,我们在这捋一捋思路:按照我们上述监督学习的学习方法,首先我们确定SVM的模型目标:求得wTx+b=0,得到最优超平面;接着确定采用的策略:仍然是老套路代价函数,换种集合解释为让支持向量离最优超平面的距离最大化,来求得w和b参数。没错,这就是“朴素”SVM的思想。

2.2.2 第一变之软阈值(松弛变量)

高中看斗破,中二了好久,特别是里面有个斗技叫“天火三玄变”吧,可以将自身实力一层一层总共三层提高。这里我们也对Original SVM进行转变,使其变得更为强大。

重新回归主题,上述我们已经把“朴素”SVM的思想介绍完毕,但是在策略上读者应该发现了,我们还没有使用最为实用的“结构化经验函数最小化”的原则。所以我们继续转化17式,将其正则化,使其能对噪声能够有足够的对抗性。

具体而言,对于SVM中的噪声,我们称之为 outlier 。因为超平面本身就是只有少数几个 support vector 组成的,如果这些 support vector 里又存在 outlier 的话,其影响就很大了。

现在考虑到 outlier 问题,17式中的约束条件变成了:

这里写图片描述

其中ξi称为松弛变量 (slack variable) ,对应数据点允许偏离 functional margin的量。当然,如果我们允许ξi任意大的话,那任意的超平面都是符合条件的了。所以,我们在原来的目标函数后面加上一项,使得这些ξi的总和也要最小:

这里写图片描述

所以由17我们继续转化为18:

这里写图片描述

在上篇文章2.1.4“logistic回归与SVM”一节中,我们介绍了SVM的代价函数,现在我们推导从18式到这个代价函数的过程(由《统计学习方法》定理得):

这里写图片描述

其中,下标“+”表示以下取正值的函数:
这里写图片描述

2.2.3 第二变之核函数

经过第一变的SVM的此时看上去可能就比较完善了,这时候其实对于SVM本身而言已经完成了自身的使命。但是新的问题又出现,SVM的变种也随之呼应而来——Kernel。

至此,我们所说的分类问题,除了针对噪声过拟合问题外,还有一个通用的弊端没有解决:从线性可分到线性不可分。(线性可分?线性不可分?不理解的同学可以翻阅SVM的三层理解链接http://blog.csdn.net/v_july_v/article/details/7624837)

本篇文章系列开头就说明了不会过多谈及推导。在这里,我们主要介绍核函数的用法,和主要的思路。

既然问题摆出来了,如何使SVM适应线性不可分的问题呢?老样子,我们对其进行转化,为了方便,我们针对17式进行说明。

根据本篇1.2一节的内容,此类问题属于第(iii)类的优化问题,抓住知识点KKT。首先我们构造拉格朗日函数19,其中αi为对应的拉格朗日乘子:

这里写图片描述

其实17式的求解等价于在一定条件下(αi≥0)求解下面20:
这里写图片描述

这个问题变量不少,求解起来比较困难。为了解决这个问题,我们引入拉格朗日对偶性,使其对换一下位置,可以在KKT条件下有21:

这里写图片描述

我们对偶化的maxmin式进行求解:
(1) 首先固定α,要让 L 关于w和b最小化,我们分别对w,b求偏导数,即令∂L/∂w 和 ∂L/∂b 等于零,其结果带到L中;

(2) 经过上面第一个步骤的求w和b,得到的拉格朗日函数式子已经没有了变量w和b,只有α。求对α的极大,即是关于对偶问题的最优化问题。即我们由21转换为22:

这里写图片描述

(3) 这样,求出了αi,根据下列公式23求得w和b的最优值,最终得出分离超平面和分类决策函数。
这里写图片描述

根据23中w的公式,我们将分类函数f(x)=wTx+b转化为24:
这里写图片描述

而维度映射相当于把24映射成25:
这里写图片描述

则原来的22问题转化为26:
这里写图片描述

看样子,我们拿到非线性数据,就找一个映射 ϕ(•) ,然后一股脑把原来的数据映射到新空间中,再做线性 SVM 即可。但是2.2.1数据维度中提到过的“维度爆炸”问题在这里出现了,如何解决呢?

trick来了(这个英文单词很名副其实),其实数学家们已经设定好几个特殊的核函数供我们避免这样的问题。我们无需花心思将各维一阶、二阶的组合来创造新的维度;而是利用核函数这个trick来简化计算,同时在具体工程应用中这也给我们如何映射带来了一定的方向。所以说,核函数只是对于非线性变化简化求解所人为设定好的一种技巧。

具体而言,核函数让我们把25又转化成27:

这里写图片描述

从而26转化为28:
这里写图片描述

另外,我们上述的推导均针对于未正则化之前的17式;而正则化后的18式经过核技巧后,我们转变为29(也就是约束条件中αi多了一个上界C):

这里写图片描述

关于常用的核函数,有高斯核、多项式核等等。这些知识可以查阅各类网站,具体实践中我们根据具体问题来对待,在这我们就不展开介绍了。

2.2.4 第三变之SMO

终于到了第三变,这第三变便是针对于2.2.3节中maxmin式求解步骤的第(3)步。在(2)中,我们得到了22式,第(3)步中需要对22式中α进行求解,要解决的是在参数[α1,α2,…,αn]上求最大值 W 的问题,至于xi和yi都是已知数。这时候我们需要一定快速优质的求解方法,这时SMO算法终于出场。

写点题外话,文章写到这,一共码了小7000的字了。本来按我的习惯了,应该是打下一串“SMO算法见高人的博客”,并附上链接然后拍拍屁股关上电脑了。可这几天搜集SVM相关资料时,知乎上有人说面试时其实关于“SMO算法”提问挺多。想想还是自己再过一遍,写下一些东西。至此,我对正在学习和准备学习机器学习的童鞋们说说,不管是为了功利主义的追求,还是自己兴趣所在的坚持。SVM都是咱们在机器学习路上必须克服也是我认为第一个重量级的boss,不管是知其个大概,还是通晓其头尾,多回顾回顾SVM的知识,有空从头到尾推导一遍,相信每一次都会有不一样的收获。

但是这样并不妨碍我留下大神的博客http://blog.csdn.net/luoshixian099/article/details/51227754,<( ̄3 ̄)> ,这其中《SVM的三重境界》写得比较简略,可以和这篇博客一起参看(当然《统计学习方法》一书仍然推荐),效果更佳。

那既然已经有大神开山铺路,本节还需介绍啥呢。还是老套路,本节我们依旧介绍大的方向和思路。

首先依旧是SMO出现的背景。支持向量机的求解其实有很多优化算法,为什么SMO算法可以独树一帜?原因在于当训练样本容量很大时,这些算法往往变得很低效,以致无法使用。所以SMO作为快速实现方法,具有很强的实用性。

回顾2.2.3一节末尾,SMO算法所要解决的优化问题为29:

这里写图片描述

在这个问题中,变量是拉格朗日乘子[α1,α2,…,αn],一个变量αi对应一个样本点(xi,yi)。而SMO的主要思想是:

首先,类似于“坐标上升法”,设置其中所有变量中的一个为“变量”,其他的视为常数。但是因为29式中等式约束条件的存在,如果只设置一个“变量”,如果这时候其他的视为常数,那么α1+α2,…,+αn≠0;所以,我们采取的方法是设置两个“变量”,其他的视为常数。这之后进行求解,就比原来的优化问题简单多了。

其次,这两个变量的选择,变量不是在[α1,α2,…,αn]中随机选择,它满足:一个是违法KKT条件最严重的那一个,另外一个由等式约束可以确定。

这两部分在这里就不赘述了,纯属数学推导。

最后,我们把这几章的内容总结一番,制作一张记忆卡给大家:

这里写图片描述

原创粉丝点击