首页 > 代码库 > SVM -支持向量机原理详解与实践之二

SVM -支持向量机原理详解与实践之二

SVM -支持向量机原理详解与实践之二

 

  1. SVM原理分析

    以下内容接上篇。

    1. 拉格朗日对偶性(Largrange duality)深入分析

前面提到了支持向量机的凸优化问题中拉格朗日对偶性的重要性。

因为通过应用拉格朗日对偶性我们可以寻找到最优超平面的二次最优化

所以以下可以将寻找最优超平面二次最优化(原问题),总结为以下几个步骤:

  1. 在原始权重空间的带约束的优化问题。(注意带约束)
  2. 对优化问题建立拉格朗日函数
  3. 推导出机器的最优化条件
  4. 最后就是在对偶空间解决带拉格朗日乘子的优化问题。

    注:以上这个四个步骤是对优化问题的的概括,后面会注意讲解这几个步骤。

于是首先想到的几个随之而来的几个问题:

  • 第一个问题是拉格朗日对偶性是什么?
  • 第二问题是为什么拉格朗日对偶性可以帮助我们找到最优超平面的二次最优化?
  • 第三个问题是如何运用拉格朗日对偶性找到最优超平面的二次最优化?

    下面的内容将对以上三个问题进行深入的分析。

    首先对于第一个问题,我们首先必须清楚两个概念即原问题和对偶问题,以及他们之间的关系.

  1. 原问题

假设技术分享是定义在技术分享上的连续可微函数,考虑约束最优化问题:

技术分享

称为约束最优化问题的原问题。注意必须是连续可微的。类似的对比我们之前分析的最优超平面的二次最优化问题:

技术分享

其中技术分享就为技术分享,约束条件技术分享对应的就是技术分享,都是带约束的最优化问题。如果是不带约束(没有后面的约束条件)我们知道可以直接对技术分享直接求偏导,即可解出最优解。

但是如何把带约束的原始问题转化为不带约束的原问题呢?拉格朗日函数就是解决这个问题的,于是我们引入广义的拉格朗日函数

技术分享

其中技术分享是拉格朗日乘子,需要注意的是约束条件技术分享

如果我们把上面这个广义的拉格朗日函数技术分享看做是一个关于技术分享的函数,于是要求求解这个关于技术分享的函数技术分享的极大值,表示如下:

技术分享

要求解上式,我们可以将技术分享看做常数,求解出一对技术分享使得技术分享得极大值,求出这一对技术分享后,又由于技术分享已经确定,很显然的:

技术分享

只是一个和技术分享有关的函数,我们将这个函数定义为:

技术分享

这里技术分享中的P下标表示"primal"。让我们假设技术分享已经给定,我们可以通过是否满足约束条件来分析这个函数。

  • 情况一:技术分享违反了原始的约束,也就是技术分享或是技术分享,如下:

    技术分享

有前面的定义可知技术分享,又由于违反了原始的约束,也就是技术分享或是技术分享这个情况,所以很容易通过取拉格朗日乘子技术分享的值使得技术分享,也就是:

技术分享

  • 情况二:技术分享满足原始的约束,也就是技术分享或是技术分享,所以:

    技术分享

注意要想使得技术分享最大化,由于满足约束条件技术分享或是技术分享,其实就是后面两个式子就等于0,又由于在最大化的过程中技术分享为常数,常数的最大值就是本身,所以:

技术分享

通过上述的分析我们可以总结技术分享,也就是:

技术分享

上面分析了原问题技术分享技术分享满足原始的约束和不满足原始约束的情况下的取值,那么如果是在满足原始约束的条件下面我们考虑最小化技术分享的问题:

技术分享

也即:

技术分享

是的,到这里我们发现技术分享和我们前面定义的原问题技术分享一样。它们是等价的,于是我们将原始问题的最优值定义为:

技术分享

总结:通过拉格朗日函数重新定义一个无约束问题,这个无约束问题等价于原来的约束优化问题,从而将约束问题无约束化!

 

  1. 对偶问题

定义一个关于技术分享的函数:

技术分享

这里的D是指‘Dual‘ 即对偶,注意和技术分享是一个关于技术分享的函数不同,这里的技术分享是一个关于技术分享两个拉格朗日乘子的函数。等式的右边确定是关于技术分享的函数的最小化,当技术分享确定以后,最小值只和技术分享有关。

下面极大化技术分享,于是有:

技术分享

观察上式,对比原问题:

技术分享

我们可以看到对偶问题是先最小化技术分享再对结果取最大化,而原问题则相反,它们的区别在于:

  • 原问题先固定技术分享中的技术分享,优化出参数技术分享,再优化出最优的技术分享
  • 对偶问题则是先固定技术分享,优化出最优的技术分享,最后确定参数技术分享

为了方便讲解我们定义对偶问题的最优值为:

技术分享

  1. 原问题与对偶问题的关系

定理:若原始问题与对偶问题都有最优值,则:

技术分享

证明:对任意技术分享有:

技术分享

即:技术分享

由于原始问题和对偶问题都有最优值,所以:

技术分享

即:技术分享

也就是说原始问题的最优值不小于对偶问题的最优值,但是我们要通过对偶问题来求解原始问题,就必须使得原始问题的最优值与对偶问题的最优值相等,于是可以得出下面的推论:

推论:设技术分享技术分享分别是原始问题和对偶问题的可行解,如果技术分享,那么技术分享技术分享分别是原始问题和对偶问题的最优解。

到此我们通过对原问题和对偶问题,以及它们之间关系的了解,也就回答了前面提的第一个问题:拉格朗日对偶性是什么?

这里再次总结拉格朗日对偶性:即

  1. 如果原问题有最优解,对偶问题也有最优解,并且相应的最优值是相同的;
  2.  
    1. KKT条件

定理:对于原始问题和对偶问题,假设函数技术分享技术分享是凸函数,技术分享是仿射函数(即由一阶多项式构成的函数,技术分享),A是矩阵,b是向量);并且假设不等式约束技术分享是严格可行的,即存在技术分享,对所有技术分享技术分享,则存在技术分享技术分享,使得技术分享是原始问题的最优解,技术分享是对偶问题的最优解,并且:

技术分享

定理:对于原始问题和对偶问题,假设函数技术分享技术分享是凸函数,技术分享是仿射函数(即由一阶多项式构成的函数,技术分享),A是矩阵,b是向量);并且假设不等式约束技术分享是严格可行的,即存在技术分享,对所有有技术分享,则存在技术分享技术分享,分别是原始问题和对偶问题的最优解的充分必要条件是技术分享技术分享,满足下面的Karush-Kuhn-Tucker(KKT)条件:

技术分享

关于KKT 条件的理解:前面三个条件是由解析函数的知识,对于各个变量的偏导数为0(这就解释了一开始为什么假设三个函数连续可微,如果不连续可微的话,这里的偏导数存不存在就不能保证),后面四个条件就是原始问题的约束条件以及拉格朗日乘子需要满足的约束。

特别的条件技术分享叫做KKT的对偶互补条件,这个条件隐含了如果技术分享,那么技术分享,也就是说,技术分享技术分享处于可行域的边界上,这时才是起作用的约束,其他位于可行域内部(如技术分享)的点都是不起作用的约束,这时候的技术分享

总结:在某些条件下,把原始的约束问题通过拉格朗日函数转化为无约束问题,如果原始问题求解棘手,在满足KKT的条件下用求解对偶问题来代替求解原始问题,使得问题求解更加容易。

 

  1. 最优间隔分类器

上个章节中我们详细介绍了拉格朗日对偶性,原问题以及对偶问题,还有他们之间的关系,最后还介绍了KKT条件,这也就回答了在拉格朗日对偶性章节开头提到第一个和第二个问题。

这一章节我们就开始介绍从二次优化问题构造拉格朗日函数开始一步步介绍如何运用拉格朗日对偶性求解对偶问题的解,从而得到原问题解的过程。也就是我们的第三个问题。

  1. 支持向量、构造拉格朗日函数

在二次最优化章节中,我们将寻找决策曲面使得几何间隔最大化的问题转化为了可以通过拉格朗日对偶性求得最优解的二次最优化问题,如下:

技术分享

因为我们是要求关于w的最优化,所以在这一章节中我们将约束条件改为关于w的函数:

技术分享

 

为什么将技术分享而不是令技术分享呢?

因为我们为了通过拉格朗日对偶性求解问题,则原问题的约束条件就需要写成前面提到定义一样的形式即技术分享 (这里的x就是w),也就是约束条件转化为小于0的形式即:技术分享0,所以令技术分享

对于任一训练样本我们只有这样的一个约束条件,注意前面章节最后提到的从KKT对偶互补条件,我们有技术分享,但这只是对于函数间隔正好为1的训练样本(例如,那个对应的约束,即保持等式技术分享)。考虑下图,在下图中实线表示最大间隔分离超平面:

技术分享

如上图我们可以看到那些有着最小间隔的点正是距离决策边界最近的点,图中有三个这样的点,其中一个在负例两个为正例,他们恰好在决策边界两边的虚线上。这些在虚线上的点就是函数间隔为1的训练样本,这些样本点前面的系数就是技术分享,由前面分析知道,这些样本是非零(技术分享> 0)的,技术分享为这些特殊样本点前面系数,其他的的都是技术分享=0的。这些特殊的点就是支持向量。事实上这些支持向量的个数要比训练集大小要更小就更有帮助。

下面为我们的优化问题构造拉格朗日运算,在这之前先回顾广义的拉格朗日函数:

技术分享

对比广义的拉格朗日函数,优化问题技术分享也就是上式的技术分享,约束技术分享1, 参考原问题中的约束条件技术分享,所以没有拉格朗日乘子技术分享,于是我们为优化问题构造优化问题拉格朗日函数:

技术分享

  1. 求解拉格朗日函数

根据上一章节所描述的,求解上式我们需要从它的对偶形式着手,所以首先要找到上式的对偶形式,为了达到这个目的,参考上一章节对偶问题的描述:

技术分享

  • 对偶问题则是先固定拉格朗日乘子技术分享,优化出最优的技术分享,最后确定参数技术分享

在这里就是首先最小化关于技术分享的函数技术分享(就是技术分享),先固定拉格朗日乘子技术分享,优化出最优的技术分享,最后再确定参数技术分享;为了得到

技术分享

首先需要对关于w的函数技术分享求偏导,

 

技术分享

 

也就是:

 

技术分享

3.7.2-1

上式就是一个关于w的表达式,但是它是最优的,下面对关于b的函数技术分享求偏导,

 

技术分享

3.7.2-2

我们将对w求得到的偏导技术分享带入到原技术分享中可得到该函数的最小值:

 

技术分享

3.7.2-3

上式的计算过程如下,其中技术分享, 另外5)到6)步用到了线性代数的转置运算,6)到7)步用到了乘法运算法则:

(a+b+c…)(a+b+c…) = aa + ab+ac+ba+bb+bc+ca+cb+cc…

技术分享

由关于对b的函数技术分享求偏导计算结果(3)可知,(4)中的最后一项为0;所以简写(4)可得:

     

技术分享

3.7.2-4

回顾得到上式(5)的整个过程,我们是通过最小化关于技术分享的函数得到的,观察5)我们可以发现技术分享只包含了变量技术分享,至此我们完成了对偶问题中先固定乘子技术分享,得到最优化的技术分享(关于技术分享的表达式)的步骤,然后就是要确定乘子技术分享(有了技术分享我们才可以最终确定技术分享),为了确定技术分享我们下一步就是要最大化技术分享,也就是对偶问题:

技术分享

为了确定技术分享,我们首先要将上式表示成关于技术分享的函数即:

技术分享

其中技术分享技术分享的内积形式

到此我们还不能解(6)方程,后面会通过SMO算法来求解,因为在线性不可分模式下寻找最优超平面,还需要引入软间隔,求解的结果和上式类似。但是到这里可以确定的是,一旦确定技术分享,我们就可以通过式(2),也就是对w求的偏导数:

技术分享

求得到技术分享,也就是原问题的解。然后通过以下公式,可以直接求出截距技术分享

 

技术分享

3.7.2-6

  1. 预测新样本分类

假设我们已经通过SMO算法计算出了w,随之计算出了b,于是我们得到了一个可供预测新样本分类的模型,现在来了一个新的样本技术分享需要我们预测,于是我们回到了预测问题技术分享,带入:

技术分享

可得:

技术分享

观察上式可知,为了预测新样本的分类,我们就必须计算一个量,这个量取决于新样本技术分享和所有训练集中的样本技术分享的内积和,这个计算不会很大,因为我们从KKT条件可以知道只有支持向量的点技术分享,因为我们已经知道支持向量是那些距离最优超平面最近的点,所以这些点不会很多,也就是说大多数的向量点都的系数技术分享;从而上式中的大多数项都等于0,我们只需要计算支持向量和新样本技术分享即可,所以训练完成后最终的模型只和支持向量有关。

  1. 不可分模式下的最优超平面

前面我们已经讨论了线性可分模式下的最优超平面的情况,但是在现实中训练集往往是线性不可分的。例如下图所示:

技术分享

从上图我们可以看到,在二维空间正例和负例是交叉的,但是在三维空间我们就可以找到一个决策曲面将训练样本分隔开来。所以我们希望将在二维空间线性不可分的问题转化到三维去解决,面对现实中更复杂的问题,我们可以抽象的说,将在低维空间线性不可的问题转化为高维空间线性可分的问题,尝试在高维空间去找到这个将正例和负例分隔开来的决策曲面,这样往往比较有效,但是不是绝对的,需要记住这点。

为了将低维的数据(其实也就是向量)映射到高维空间,我们就需要映射函数的表示,我们这里将它统一的表示为:技术分享

向量的维度也就是说向量的长度,例如幼儿做儿童保健的时候需要看一些指标来判定儿童的生长状况{身长,体重,脑颅宽度,囟门}等,这里我们说指标数据是四维的。

一个房子要评估它的价格有几个特征可以参考如{面积,房间个数,厕所个数}等,这里的特征数据就是三维的。

  • 输入属性(input attributes):就是原始问题的属性,例如面积技术分享
  • 输入特征(input features)就是通过映射后传给学习算法的量。
  • 特征映射(features mapping): 从输入属性到输入特征的映射,这里用技术分享表示,输入特征即技术分享

特别的如果输入向量有m维,则技术分享可以表示为:

技术分享

SVM -支持向量机原理详解与实践之二