支持向量机_斯坦福CS229_学习笔记

Part V 支持向量机(Support Vector Machines)

支持向量机(Support Vector Machines)被认为是最好的监督学习算法。作为解决二分类问题而被提出。接下来,我想结合自己的理解,来讲讲SVM的故事。故事章节相对而言较多,结合目录来看会更清晰一些。


目录

Part V 支持向量机(Support Vector Machines)

Chapter 1 前言

Chapter 2 符号

Chapter 3 函数间隔和几何间隔

Chapter 4 最优边界分类器

Chapter 5 拉格朗日对偶问题

Chapter 6 最优边界分类器的对偶问题求解

Chapter 7 SVM优化之核函数

Chapter 8 SVM优化之软间隔分类器 

Chapter 9 SMO算法

9.1 坐标上升算法

9.2 SMO

9.3 启发式选择迭代参数

Chapter 10 小结


Chapter 1 前言

SVM的故事得从间隔(margin)这个概念讲起。还记得在逻辑回归中,我们是怎么进行分类的吗?我们相当于画了一条h(x)=0.5的线进行判断。当h(x)>0.5,认为是正样本,否则视为负样本。这样一刀切判断的方式,自然而然的问题是对于所有h(x)>0.5都一视同仁了。因为无论是直觉还是逻辑都告诉我们,当h(x)越接近于1时,正样本的可能性也就越高;反之,当h(x)越接近于0,那么负样本的可能性也就越高;而在h(x)约为0.5时,是最模棱两可的时候。因此一个改进的地方便是需要使用某种方式去衡量这种置信的程度。而考虑了这种置信程度的事儿,正是SVM所要做的。

再观察下面这张图:

支持向量机_斯坦福CS229_学习笔记_第1张图片

一条直线(决策边界)将样本分开。假设X代表正样本,O为负样本。此时A、B、C三点都被划分为了正样本,即使这样,正样本与正样本之间扮演的角色是不同的。A更像是正样本,而C最不像正样本。也就是A是正样本的置信程度比C高,但是在逻辑回归中,训练的时候,我们却将A、B、C三点一视同仁。如何体现A、B、C三点在训练之中扮演的角色,这是SVM的突破口。

为了便于接下来的理解,这里直接给出最简单的SVM的例子。

支持向量机_斯坦福CS229_学习笔记_第2张图片

参照上图,SVM的思想便是:寻找一条边界(图中实线),使得正类别和负类别中距离该边界最近的点(虚线上的点,这些点也称为支持向量)到边界的距离最远。也就是说,在各个类别的样本中,只有支持向量对于该边界的形成有影响。话不算拗口,思路也算清晰,但是SVM的故事却很深很长。 


Chapter 2 符号

为了便于SVM的推导,需要做一些记号的更改。

(1)负正样本不再用(0,1)表示,而是用(-1,1)表示。

(2)我们所有求得的划分的超平面,也就是决策边界记为 \bg_white \small g(x)=w^{\top }x+b。即相对于之前的线性回归与逻辑回归:

 (3)采用如下方式进行判断:当有判断数据来时,带入上式。若结果大于0,即判断为正样本1;否则判断为负样本-1。这样定义看上去有点像感知机算法。


Chapter 3 函数间隔和几何间隔

那么如何体现同一类别中不同样本的差异呢?也就是说,SVM中的这个距离量度该怎么衡量呢。函数间隔(Functional Margin)和几何间隔(Functional Margin)为此提供了一个思路。

对于一个训练样本 (x^{i},y^{i}),相应的参数w和b,定义这个样本的函数间隔如下:

有两个细节需要注意:

(1)函数间隔始终为非负。当该样本属于正样本时,即 y^{i}=1,那么要使函数间隔变大,即要使 w^{\top }x+b 为一个较大的正实数;同样,当样本属于负样本时,即 y^{i}=-1 ,那么要使函数间隔变大,即要使 w^{\top }x+b 为了一个较大的负实数。

(2)由细节(1)可知,利用函数间隔我们可以判断分类器是否分类正确,如果 y^{i}(w^{\top }x+b)>0 ,那么就认为分类正确。不仅如此,当函数间隔越大时,我们越有理由相信,这个分类结果越正确。

有了单个样本的函数间隔,假设样本集有m个样本,下面给出整个样本集S的函数间隔定义。

契合SVM的思想,将整个样本中最小的函数间隔定义为该样本的函数间隔,

似乎函数间隔可以作为判别的依据了,那么我们只要使函数间隔越大,分类器效果应该就会更好。其实不然,因为函数间隔存在一个致命的地方。

再回头看我们定义的判别准则,w^{\top }x+b>0 判断为正样本,反之为负样本。那么你会发现满足w^{\top }x+b=0 的这个点(w,b)至为重要。如果以使函数间隔最大为优化目标,那么会存在一种情况是,当成比例的变化w和b时,也就是变化为2w,2b或者是3w,3b时,虽然函数间隔变大了,但是 w^{\top }x+b 的零点仍然是没有变化的,也就是说在这种情况下,对于优化分类器是没有作用的,分类器仍然是选用与之前的相同的w^{\top }x+b的零点作为判断。那么以函数间隔作为优化判断的方式,便会使训练时走入歧途。

看来函数间隔并不是一个很好的方式啊。但是你可能会想到,解决这个问题最直接的思路就是,把w和b单位化不就得了。没错,这就是几何间隔的思路。

既然是几何间隔,那么其故事就得从几何出发了。

支持向量机_斯坦福CS229_学习笔记_第3张图片

 观察上图,决策边界 w^{\top }x+b=0 为实线所示。那么w作为法向量,其方向自然于边界正交。那么单位法向量即为w/\left \| w \right \|。正样本A的坐标 x^{(i)},这里二维平面,那么x^{(i)}就可用x0和x1表示。A点沿着法向量方向在决策边界的投影点为B。将AB的长度定义为几何间隔,即为\gamma ^{i}(注意与函数间隔记号相比,头上少了个小三角)。注意到A点坐标为x^{(i)},那么B的坐标即为 x^{i}-\gamma ^{i}*w/\left \| w \right \|,又因为B点位于决策边界 w^{\top }x+b=0 之上,因此将B点坐标带入,可得

由此方程解出几何间隔,得 

这是A为正样本的情况,参照函数间隔的定义,定义对于某样本的几何间隔如下: 

注意到当 \left \| w \right \|=1 时,几何间隔变为函数间隔。几何间隔作为函数间隔的升级版,解决了函数间隔的问题。在几何间隔的基础上,就可以对w和b进行任意缩放了。为了契合SVM思想,给出整个样本集S的几何间隔定义,同样是选取样本中最小的几何间隔作为样本集的几何间隔。 


Chapter 4 最优边界分类器

几何间隔完成了SVM思想的第一步,即定义了距离量度,并寻找到样本中距离决策边界最近的样本(即寻找到了支持向量),那么接下来要做的便是,使支持向量跟决策边界的距离最远,即使样本集的几何间隔最大(对于分类的置信程度也就越高)。

在此,假设我们的训练集线性可分,可以将优化问题定义如下。优化的目标是使样本集的几何间隔最大。

顺水推舟,在得到样本集的几何间隔\gamma的基础之上,我们要寻找的便是一组(w,b)使得\gamma最大。这个问题显得如此抽象,无从下手,显然我们要做一些改进。还记得函数间隔和几何间隔的关系吗? 

                                                                           \gamma =\frac{\tilde{\gamma }}{\left \| w \right \|}

将函数间隔替代几何间隔,可将优化目标改写为:

还不够,仍然不好求解。继续改进。注意到,在函数间隔中提到,对于函数间隔而言,将w,b成比例缩放不会影响决策的判断,因为零点是不变的(忘记了可以参见上文)。那么我们就缩放w和b呗,反正也不影响决策结果,为了方便,缩放w,b直到函数间隔为定值1,反正也没啥关系。那么优化目标就由\frac{\tilde{\gamma }}{\left \| w \right \|}变为\frac{1}{\left \| w \right \|};又可以注意到max \frac{1}{\left \| w \right \|}min \frac{1}{2}\left \| w \right \|是一样的。因此更改优化目标为:

 这样就将之前抽象的问题转化为二次凸优化问题了。直接的方式便是利用线性规划进行解决。但是,如果这样的话,SVM这个故事岂不是就不精彩了?接下来会介绍另一个思路来解此优化问题,并且可以在其中利用核函数的思想,进行维度的扩充,使SVM的性能更强。为了引出这种方法,接下来暂且抛开以上内容,先讲讲何为拉格朗日对偶问题。


Chapter 5 拉格朗日对偶问题

暂且先不管以上内容。先看看拉格朗日对偶问题(Lagrange Duality)是什么。

引入包含限制条件的多元函数求极值中会用到拉格朗日乘数法作为抛砖引玉。首先,还是先定义了一个优化问题,可以看做一个被限制条件约束的求解极值的问题。这里假设w是n维参数向量,该问题被 \iota 个条件限制。

这个问题可以利用拉格朗日乘数法进行求解。如果对于拉格朗日乘数法求解极值没有印象的话,没有关系,接下来我们来走一下流程。首先构建拉格朗日方程,其中 \beta _{i} 为待求解参数,也称为拉格朗日乘子(Lagrange multipliers.)。

由此方程分别对于w和 \beta _{i} 求偏导 ,并令其结果为0:

得到n+\iota 个方程,联立求解这n+\iota 个方程,即可解出w。

基于上述内容,我们对于拉格朗日方程进行推广。假设要解决的问题不仅包括等式h(w)的约束,而且还包括不等式g(w)的约束。这个问题也称为原始优化问题,简称原始问题(primal optimization problem)。形式如下:

                                                             支持向量机_斯坦福CS229_学习笔记_第4张图片(5.1)

 为了解决此问题,构建广义拉格朗日方程。

在这里,相比较之前,拉格朗日乘子扩充了:k个\alpha _{i}和 \imath 个\beta _{i}

接下来,引入一个新定义,下标p代表‘primal’:

                                   (5.2)

 那么可以得到 \theta _{\rho }(w) 和 f(w)存在以下关系:

这里的原始限制条件(primal constraints)指的是原始问题中对于w的限制条件,也就是: 

你可以试下当 g_{i}(w)>0 或者h_{i}(w)\neq 0时,\theta _{\rho }(w)的形式如何,就会明白\theta _{\rho }(w) 和 f(w)的关系了。用\theta _{\rho }(w)替换f(w),那么就可以得到: 

                                       min_{w} f(w)=min_{w}\theta _{\rho}(w)=min_{w} max_{\alpha ,\beta ;\alpha _{i}\geq 0}L(w,\alpha ,\beta )

那么这又怎么解呢?暂且不管,假设其的解为p*,即 p^{*}=min_{w}\theta _{\rho }(w)

接着定义,这里下标D的意思为’dual’,该定义与(5.2)相呼应。 

在以上定义的基础上,定义对偶优化问题(dual optimization problem),简称对偶问题。注意与原始问题的区别啊。也就是改变了求最大和求最小的顺序。 

同样,定义对偶问题的解d*。 d^{*}=max_{\alpha ,\beta ;\alpha _{i}\geq 0}\theta _{D }(w)

由此,我们可以得到两个问题解之间的联系。 

如何理解呢?自然来理解,最小值里面的最大值小于等于最大值里面的最小值,没问题。

看到这里或许你就明白了,当原始问题不好求解的时候,可以转换为其的对偶问题进行求解。那么当满足什么条件时,原始问题可以转化为其对偶问题,也就是说d*=p*呢?这就是接下来要说的KKT条件。当满足KKT(Karush-Kuhn-Tucker)条件时,两个问题的解相同,理所当然就可以将一个问题转化为另一个问题进行求解了。

何谓KKT条件呢?回头看看(5.1)定义的原始问题。假设f(w),g_{i}(w)为凸函数,且h_{i}(w)为线性函数(讲义中注明h_{i}(w)为仿射,这里理解为线性就好);并且存在着一些g_{i}(w)使得g_{i}(w)<0(看完故事,你就明白这些就是要找的支持向量了)。参照上文,给出KKT条件,其中w*为原始问题的解,而a*,b*为其对偶问题中参数的解。

支持向量机_斯坦福CS229_学习笔记_第5张图片

 

第1行与第2行,容易明白,即保证拉格朗日平稳,最优解处偏导为0。第4行的定义与第5行的定义都与原始问题中的限制条件相契合。重点关注第3行。第3行也称为KKT对偶互补条件(dual Complementary condition),其暗示着若\alpha _{i}^{*}>0,则g_{i}(w^{*})=0,通过这个条件的限制,就帮助我们寻找到支持向量了。第1、2、4、5行都很直接,第3行可以看作是对于第4行和第5行的进一步约束。因为公式直接来源于讲义没有更改(可能是为了美观所以如此排列),但是我觉得将第3行放置在最后,可能会更便于理解。

真是一环扣着一环啊。趁热打铁,返回故事的主线。


Chapter 6 最优边界分类器的对偶问题求解

回到故事主线。在上文的基础上,解决之前遗留优化问题的思路浮出水面:我们可将原始问题转为对偶问题进行求解。还记得在前文(C4),我们提出下面优化问题:

                                                        (6.1)

结合(5.1),这里由于比较(5.1)来说没有等式约束,所以h_{i}(w)就不写进去了。 观察到不等式的约束,移项稍作修改,我们可以这么定义g_{i}(w)

这里相当于每个样本都给分类器提供了一个限制条件。

如果你没有忘记的话,这里的1代表的是样本集函数间隔为1,即某一样本的函数至少为1。结合KKT中的对偶互补条件可知,若\alpha _{i}>0,那么该训练样本的函数间隔为1。但是注意反之确不一定成立。这是个小细节,但是感觉大家都没有深究一下,对于函数间隔为1的点,其对应着的\alpha _{i}不一定大于0啊,那么便会存在着一种情况即所有的支持向量对应着的\alpha _{i}的值都为0,那么此时结合(6.3)式w便为0,结合(6.5)b也为0,此时的决策边界即为x=0。对于其他函数间隔大于1的点来说,同样由于KKT互补条件的限制,使得其\alpha _{i}为0。也就是说真正对于优化起限制作用的是那些函数间隔为1的点(也就是支持向量)。从这里你就可以发现,KKT互补条件的其中之一作用便是找到支持向量,从而只使支持向量对于优化目标具备限制作用。

在(6.1)的基础上构建拉格朗日方程:

                             (6.2)

注意由于只有不等式约束,所以拉格朗日乘子只有\alpha _{i}。下一步便是将(6.1)转化为对偶问题的形式进行求解。

首先最小化(6.2)时,此时的参数为w和b。这一步可以直接对(6.2)中w和b求偏导,并另其偏导数为0进行求解。对w求偏导:

得  

                                           (6.3)

接着对b求偏导得 

                                         (6.4)

 将(6.3)带入(6.2)得

带入(6.4)抵消最后一项得 

这就完成了对偶问题求解的第一步。整理以上限制条件,那么可以得到求解的第二步如下所示: 

支持向量机_斯坦福CS229_学习笔记_第6张图片

在这里注意几个细节:

(1)这里先不给出如何求解此方程,因为会在下节插入一些内容。具体求解方式在之后会进行介绍。

(2)针对于整个问题来说,我们要求解的参数为w和b。当我们求解此方程得到a后,将其带入(6.3)式,便可解出w。

(3)在这里,大家也注意到了。我们将 x^{(i)}^{\top }*x^{(j)} 写成內积的形式\left \langle x^{(i)},x^{(j)} \right \rangle。为什么这么写,是为了方便应用核函数。一环扣一环,具体请见下一节内容。

(4)如果只针对上述问题,可以感性的给出参数b的求解结果。b的具体求解步骤参照C9。

 看图说话会更明白一些。

支持向量机_斯坦福CS229_学习笔记_第7张图片

要明白,b这个变量相当于该决策边界的截距。那么当w求出来之后,因为我们明白,该决策边界总是在中间,距离两端的支持向量一样远。参数b就是两个分类中的支持向量对应着的平行于决策边界的线(上、下两条虚线)的截距的平均值。

好了,有了参数w和b,那么当有一个数据需要判断时,可以直接带入方程w^{\top }x+b=0进行判断了。若结果大于0,即为正样本,否则为负样本。但是也有另一种判断形式。将(6.3)式带入w^{\top }x+b=0 可得:

支持向量机_斯坦福CS229_学习笔记_第8张图片

 之所以这样做的目的是在于,许多的\alpha _{i}都为0,仅有支持向量对应着的\alpha _{i}不为0,用\alpha _{i}来进行判断会减少不少的计算时间,因此会节省一些计算资源。

至此SVM的求解就差最后一步了。但是先不急继续,SVM之所以强大,少不了对于其做的一些优化措施。接下来的两节,会讲述基于SVM算法的优化。正如前文所述,SVM的故事很深很长,所以,让我们继续吧。


Chapter 7 SVM优化之核函数

在上一节的后部分,在处理x^{(i)}^{\top }*x^{(j)} 的时候,都写成了內积形式\left \langle x^{(i)},x^{(j)} \right \rangle,这也是为这章要阐述的核函数做一个铺垫。如果你没太注意,可以返回到一开始,当介绍SVM时,我们做了一个前提假设,即假设训练集线性可分。那么若是训练集线性不可分呢?这便可以应用核函数进行解决。核函数的作用便是将低维特征空间映射到高维,因此在低维空间不可分的问题就可能会在高维空间得到解决。

首先,让我们看下什么是特征映射,例如假设x为一维特征向量,经过如下函数 \phi (x) 进行映射,便可从一维空间映射到三维空间。经过映射后便可以改变原有特征的维度。

支持向量机_斯坦福CS229_学习笔记_第9张图片

那么核函数的所要做的便是将原本的特征空间映射到更高维的特征空间,这样在低维特征空间线性不可分的问题就可能会在高维特征空间线性可分,从而使在低维空间线性不可分的问题得到解决。

由于在之前的算法中,已经写成了內积的形式,那么要进行特征映射,只需将 \left \langle x^{(i)},x^{(j)} \right \rangle 替换为 \left \langle \phi (x^{(i)}),\phi(x^{(j)}) \right \rangle 就行了。

根据某种特征映射\phi (x),进一步我们可以定义核函数如下:

 因此,在原有算法所有使用 \left \langle x^{(i)},x^{(j)} \right \rangle 的地方,我们相应替换为K(x^{(i)},x^{(j)})。那么算法便可以根据映射后的特征进行学习了。而且使用核函数的一个不错的优势在于,尽管对于映射函数\phi (x)的计算会比较慢,但是实际计算中,我们不需要计算\phi (x),因此核函数的计算并不会过于增加计算量。让我们看看以下例子便会明白了。

假设x,z\subseteq \mathbb{R}^{n},我们有一个核函数计算形式如下:

那么这个核函数对应着的\phi (x)是什么形式呢?我们可以将其展开来看一下: 

支持向量机_斯坦福CS229_学习笔记_第10张图片

 将其改写为K(x,z)=\phi (x)^{\top }*\phi (z)的形式,并设此时维度n=3。那么\phi (x)便有以下形式。可以看到以此种方式,将变量原有的3维特征空间映射到了9维。

支持向量机_斯坦福CS229_学习笔记_第11张图片

是不是很有趣,让我们看看其他的核函数的形式。

(1)上述核函数更一般的形式。

 (2)高斯核函数,貌似可以将特征映射到无限维。不明觉厉。

看到这里,是否会感觉唐突,因为按照逻辑来讲,应该是先给出映射函数\phi (x),然后再给出根据\phi (x)相乘后的核函数的化解形式。但是却先给出了核函数的化解形式,然后再利用其推出映射函数\phi (x)。之所以这样做,我觉得这更多的是数学和应用的原因吧,核函数在进行特征映射的作用之外,而且还有一个要求是不能给之前的计算带来太多的负担。如果我们从映射函数\phi (x)的角度出发去构造核函数,那感觉就像买彩票一样,碰运气,因为很难保证最终化解结果便于计算,而且实际上我们也不太关心\phi (x)会是什么样子,想关心好像数学功底也不行,只要核函数能将特征维度映射到高维空间就可以了,如果效果不好,那就换一个核函数继续;但是如果从核函数的结果出发,去反推的话感觉还简单一些。实际上,当我们从结果出发去构建时,只要有一个准则去帮助我们判断这个核函数是否有效就可以了,就省去反推\phi (x)的步骤,因为我们也不关心\phi (x)具体是什么。

这个准则就是Mercer定理:

在原有特征维度可数,且样本数量可数的前提下,核函数是有效核的充分必要条件是,该核函数对应着的核矩阵对称半正定。

若样本数量为m,核矩阵KK是一个m*m的矩阵,且KK(i,j)=K(x^{(i)},x^{(j)})

有了Mercer定理,好像就可以肆无忌惮的定义核函数了。

核函数作为一种优化手段,使SVM得性能得到极大提升。在其他一些算法,核函数也能发挥不小的作用。怪不得都把这种优化手段称为“kernel trick”。接下来会阐述SVM中的第二种优化手段。


Chapter 8 SVM优化之软间隔分类器 

虽然核函数将特征空间由低维度映射到了高维度,但是仍有可能也会在高维度中线性不可分。并且有时候找到一个严格的决策边界也并不是我们的目标。参照下图。

支持向量机_斯坦福CS229_学习笔记_第12张图片

左图是很理想的情况。实际情况中,往往会有许多噪声,如右图左上方的小圆。这些噪声使得决策边界有了不小改变,使得分类器得到的边界很窄,这样分类的置信程度就不高。但是实际情况中,我们还是希望决策边界能够不考虑噪声的影响,仍然得到右图中虚线的形式。这也就是软间隔分类的思路。

既然如此,我们就加入一些正则化项,利用L1正则化,将优化的目标函数修改为:

支持向量机_斯坦福CS229_学习笔记_第13张图片

 

也就是说,现在样本的函数间隔被允许小于1。且对于函数间隔在 1-\xi _{i} 的点,我们会给予 C*\xi _{i} 的惩罚,从而使成本增加。参数C一方面的作用是使边界扩大,一方面也在保证着大多数的样本函数间隔至少为1。

结合前文内容,考虑软间隔分类的情况下,构建拉格朗日方程得到:

此时,拉格朗日乘子不光有\alpha _{i},还有\gamma _{i}。接着,推导其对偶方程得:

支持向量机_斯坦福CS229_学习笔记_第14张图片

可以发现,\gamma _{i}抵消了;并且和之前唯一的区别在于,由0<=\alpha _{i},变为了0<=\alpha _{i}<=C

在这里,相应的KKT互补条件也要进行更改。

并且,在现在的情况下,得到的截距b的表达式也肯定和之前不一样了。到了这一步,真的是万事俱备,只欠东风了。到底解出对偶方程后的第一步后,第二步该怎么解\alpha _{i}。一鼓作气,接下来就看看到底该怎么解。


Chapter 9 SMO算法

9.1 坐标上升算法

在讲SMO(Sequential Minimal Optimization)的故事之前,我们先看看一个叫做坐标上升(Coordinate Ascent)的算法。暂且先抛开之前的内容。假设现在我们需要解决一个无条件限制的优化问题,如下:

 之前其实也遇到过类似的问题,在前面两讲中,构建极大似然方程进行参数求解就是该问题的一个例子。那时,可以利用梯度上升或者牛顿法进行求解。类似的,利用坐标上升法也可以对同样问题进行求解。坐标上升法如下所示:

支持向量机_斯坦福CS229_学习笔记_第15张图片

同样也是迭代的思路进行求解。思路如下:在每次迭代中,假设选取\alpha _{1}进行迭代,那么固定除\alpha _{1}外的其他参数,此时w就可看作是\alpha _{1}的函数,就是一个一元函数求极大值的问题,那么令\frac{\partial w }{\partial \alpha _{1}}=0,便得到\alpha _{1}的新值,以此作为更新。接着选取\alpha _{2}\alpha _{3}...\alpha _{m}进行同样步骤。这样便进行了一轮迭代。重复这轮迭代直到所有参数收敛。便完成了对于参数\alpha _{i}的求解。与梯度上升作为对比,看看坐标上升的图。差别不言而喻。

支持向量机_斯坦福CS229_学习笔记_第16张图片

从以上过程,我们可以发现,参数迭代的顺序是从\alpha _{1}\alpha _{m}。那么自然而然就可以想到,可以通过修改参数的迭代顺序,提高参数收敛的速度,例如每次选取使w增加最大的参数作为迭代的参数(虽然多增加了一些判断和计算,但是会明显提高收敛速度)。

9.2 SMO

现在回头来看看SVM。还记得之前增加了软间隔分类后的优化方程:

支持向量机_斯坦福CS229_学习笔记_第17张图片(9.1)

1998_[John Platt]_Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines这篇文章为我们求解SVM提供了一个方法,其基本思想便是在在坐标上升算法的思想上进行扩展。由于本人水平有限,对于这里许多地方也可能存在着理解不到位,具体数学原理还是请大家参照上述论文。

在坐标上升法中,我们固定了其余参数,一次只对一个参数进行迭代,但是在(9.1)中,存在着约束条件:\sum_{m}^{i=1}\alpha _{i}y^{(i)}=0。因此当固定m-1个参数时,那么最后一个参数也就被确定了,如(9.2)所示。当我们固定第2到第m个参数时,那么第一个参数其实也被固定了。因此坐标上升的方法还不能完全照搬过来。

                                     (9.2)

注意到因为y^{(i)}\in (-1,1),所以y^{(i)}^{2}=1。因此我们将(9.2)等式两边同时乘以y^{(1)},可将(9.2)写作如下形式:

                                     (9.3)

在SMO中,为了求解(9.1),我们同样应用坐标上升法的思想,但是我们通过一次更新两个参数的方式来解决问题。SMO迭代过程可概括为:

支持向量机_斯坦福CS229_学习笔记_第18张图片

让我们看看一次迭代是怎么进行的。

为了表示方便,假设这一次迭代选取\alpha _{1}\alpha _{2}作为参数(如何启发式选取将在下文介绍),固定其他参数得:

等式右端可看做一个常数,那么我们用\zeta代替,得:

                                                   (9.4)

同样因为y^{(i)}\in (-1,1),经过移项,两边同时乘以y^{(1)}后,那么\alpha _{1}可写作如下形式:

                                           (9.5)

将(9.5)带入(9.1)得:

不难发现,其实此时W即为关于\alpha _{2}的一元二次方程。通过求极值,就可以得到\alpha _{2}的新值,记为\alpha _{2}^{new,unclipped}。为啥这样记呢?这里注意在(9.1)中,对于\alpha _{i}的值存在着限制条件:

支持向量机_斯坦福CS229_学习笔记_第19张图片

结合(9.1)与(9.4),可将限制条件可视化看下:

支持向量机_斯坦福CS229_学习笔记_第20张图片

(1)由于0<=\alpha _{i}<=C,因此\alpha _{1}\alpha _{2}的值只能在边长为C的正方形中选取。

(2)在此基础上,又由于(9.4)的限制,所以\alpha _{1}\alpha _{2}的值只能在\alpha _{1}y^{(1)}+\alpha _{2}y^{(2)}=\zeta这条直线上选择。

结合(1)和(2),因此选择范围即为图中的红线段。所以,在得到\alpha _{2}^{new,unclipped}后,我们需要对其进行裁剪。下式中的L,H表示直线\alpha _{1}y^{(1)}+\alpha _{2}y^{(2)}=\zeta与边界或者是坐标轴的交点。

支持向量机_斯坦福CS229_学习笔记_第21张图片

经过裁剪后,得到\alpha _{2}^{new},将其带入(9.5),便可以解出\alpha _{1}^{new}了。

接下来依次选择[\alpha _{2}\alpha _{3}]…[\alpha _{m-1}\alpha _{m}]按上述流程进行迭代后便完成一次迭代流程。重复此迭代流程,直到所有参数收敛。将解得的\alpha _{i}带入(6.3)便可以解得w了。那么b该怎么解呢?还记得在第6章的时候,我们只是感性的给出了b的解,而且当涉及到软间隔分类时,b的解情况肯定会有所不同。在这里,以i=1和i=2为例,我直接给出b的解的公式,具体过程参照John Platt论文。

支持向量机_斯坦福CS229_学习笔记_第22张图片

其中E_{i}表示预测值与真实值之间的差,即E_{i}=f(x^{(i)})-y^{(i)}

K_{ij}代表核函数K(x^{(i)},x^{(j)})

如果同时满足0<\alpha _{i}^{new}<C,那么b_{1}^{new} = b_{2}^{new}

如果同时满足\alpha _{i}^{new}在边界上(等于0或C),则取他们的中点:b_{1}^{new} = b_{2}^{new}:=\frac{b_{1}^{new}+b_{2}^{new}}{2}

现在w,b都已求解,大功告成。但是故事还剩最后一个小部分,让我们一起看看吧。

9.3 启发式选择迭代参数

请回头再看SMO的迭代过程,会发现在第一步中涉及到启发式选择迭代参数这一步骤:即我们不再根据参数的顺序来选择每次更新的变量,而有条件的选择变量使收敛得更快。仍然直接列出选择原则,具体原理参照论文。

第一个变量选择:把非边界样本集中0<\alpha _{i}<C违反KKT的第一个\alpha _{i}作为第一个变量。

第二个变量选择:第一个变量\alpha _{i}的基础上,选择使 \left | E_{i}-E_{j} \right | 最大的 \alpha _{j} 作为第二个变量。E_{i}的定义见上文。

SVM的故事还有很多。至此,我所理解的SVM就差不多讲完了。照例,小结一下作为该故事的结束吧。


Chapter 10 小结

SVM备受推崇的一大原因便是其深厚的数学原理。我们由理想的二分类问题(线性可分)引出了支持向量机。SVM的基本思想便是寻找到一个超平面对于样本空间进行分割,使不同类别该超平面的距离最近的样本(支持向量)到该超平面的距离最大(这里的关键是只有支持向量对于超平面的求解有影响)。那么该超平面自然可用 g(x)=w^{\top }x+b 表示。

从这个思想出发,第一步便是寻找一个衡量距离的量度。由此引出函数间隔与几何间隔。通过比较,我们选取样本集的几何间隔作为优化目标。构建优化函数后发现这是一个非凸优化问题,根据函数间隔与几何间隔关系,我们将优化函数改写,得到如下凸优化问题:

此凸优化问题可根据线性规划进行求解。但是为了在SVM中引入核函数(核函数可以将原有特征空间进行映射,从而可能使在低维特征空间不可解的问题在高维特征空间能够得解,这大大提高了SVM的性能)与软间隔分类(与硬间隔分类作为对比,可以大大提高SVM的鲁棒性)的思想,我们采用另一种思路进行求解,那就是将其转化为对偶问题进行求解,注意其中的KKT条件最大的作用便是限制了哪些样本对于该超平面有影响。当解求对偶问题的第一步后,此时,我们的优化问题便可以改为如下形式。

支持向量机_斯坦福CS229_学习笔记_第23张图片

此时的难点便落在解求\alpha _{i}上。这里可利用SMO算法进行迭代求解\alpha _{i}与截距b,之后将结果带入对偶问题中的第一步求解过程便可解出w。

SVM包含的内容很多,我理解的内容只是冰山一角。至此,SVM的故事便告一段落了。

你可能感兴趣的:(机器学习笔记)