SVM-支持向量机原理详解与实践之二
以下内容接上篇。
前面提到了支持向量机的凸优化问题中拉格朗日对偶性的重要性。
因为通过应用拉格朗日对偶性我们可以寻找到最优超平面的二次最优化,
所以以下可以将寻找最优超平面二次最优化(原问题),总结为以下几个步骤:
注:以上这个四个步骤是对优化问题的的概括,后面会注意讲解这几个步骤。
于是首先想到的几个随之而来的几个问题:
下面的内容将对以上三个问题进行深入的分析。
首先对于第一个问题,我们首先必须清楚两个概念即原问题和对偶问题,以及他们之间的关系.
假设是定义在上的连续可微函数,考虑约束最优化问题:
称为约束最优化问题的原问题。注意必须是连续可微的。类似的对比我们之前分析的最优超平面的二次最优化问题:
其中就为,约束条件对应的就是,都是带约束的最优化问题。如果是不带约束(没有后面的约束条件)我们知道可以直接对直接求偏导,即可解出最优解。
但是如何把带约束的原始问题转化为不带约束的原问题呢?拉格朗日函数就是解决这个问题的,于是我们引入广义的拉格朗日函数:
其中是拉格朗日乘子,需要注意的是约束条件。
如果我们把上面这个广义的拉格朗日函数看做是一个关于的函数,于是要求求解这个关于的函数的极大值,表示如下:
要求解上式,我们可以将看做常数,求解出一对使得得极大值,求出这一对后,又由于已经确定,很显然的:
只是一个和有关的函数,我们将这个函数定义为:
这里中的P下标表示"primal"。让我们假设已经给定,我们可以通过是否满足约束条件来分析这个函数。
有前面的定义可知,又由于违反了原始的约束,也就是或是这个情况,所以很容易通过取拉格朗日乘子的值使得,也就是:
注意要想使得最大化,由于满足约束条件或是,其实就是后面两个式子就等于0,又由于在最大化的过程中为常数,常数的最大值就是本身,所以:
通过上述的分析我们可以总结,也就是:
上面分析了原问题在满足原始的约束和不满足原始约束的情况下的取值,那么如果是在满足原始约束的条件下面我们考虑最小化的问题:
也即:
是的,到这里我们发现和我们前面定义的原问题一样。它们是等价的,于是我们将原始问题的最优值定义为:
总结:通过拉格朗日函数重新定义一个无约束问题,这个无约束问题等价于原来的约束优化问题,从而将约束问题无约束化!
定义一个关于的函数:
这里的D是指'Dual' 即对偶,注意和是一个关于的函数不同,这里的是一个关于两个拉格朗日乘子的函数。等式的右边确定是关于的函数的最小化,当确定以后,最小值只和有关。
下面极大化,于是有:
观察上式,对比原问题:
我们可以看到对偶问题是先最小化再对结果取最大化,而原问题则相反,它们的区别在于:
为了方便讲解我们定义对偶问题的最优值为:
定理:若原始问题与对偶问题都有最优值,则:
证明:对任意有:
即:,
由于原始问题和对偶问题都有最优值,所以:
即:
也就是说原始问题的最优值不小于对偶问题的最优值,但是我们要通过对偶问题来求解原始问题,就必须使得原始问题的最优值与对偶问题的最优值相等,于是可以得出下面的推论:
推论:设和分别是原始问题和对偶问题的可行解,如果,那么和分别是原始问题和对偶问题的最优解。
到此我们通过对原问题和对偶问题,以及它们之间关系的了解,也就回答了前面提的第一个问题:拉格朗日对偶性是什么?
这里再次总结拉格朗日对偶性:即
定理:对于原始问题和对偶问题,假设函数和是凸函数,是仿射函数(即由一阶多项式构成的函数,),A是矩阵,b是向量);并且假设不等式约束是严格可行的,即存在,对所有有,则存在和,使得是原始问题的最优解,是对偶问题的最优解,并且:
定理:对于原始问题和对偶问题,假设函数和是凸函数,是仿射函数(即由一阶多项式构成的函数,),A是矩阵,b是向量);并且假设不等式约束是严格可行的,即存在,对所有有,则存在和,分别是原始问题和对偶问题的最优解的充分必要条件是和,满足下面的Karush-Kuhn-Tucker(KKT)条件:
关于KKT 条件的理解:前面三个条件是由解析函数的知识,对于各个变量的偏导数为0(这就解释了一开始为什么假设三个函数连续可微,如果不连续可微的话,这里的偏导数存不存在就不能保证),后面四个条件就是原始问题的约束条件以及拉格朗日乘子需要满足的约束。
特别的条件叫做KKT的对偶互补条件,这个条件隐含了如果,那么,也就是说,,处于可行域的边界上,这时才是起作用的约束,其他位于可行域内部(如)的点都是不起作用的约束,这时候的。
总结:在某些条件下,把原始的约束问题通过拉格朗日函数转化为无约束问题,如果原始问题求解棘手,在满足KKT的条件下用求解对偶问题来代替求解原始问题,使得问题求解更加容易。
上个章节中我们详细介绍了拉格朗日对偶性,原问题以及对偶问题,还有他们之间的关系,最后还介绍了KKT条件,这也就回答了在拉格朗日对偶性章节开头提到第一个和第二个问题。
这一章节我们就开始介绍从二次优化问题构造拉格朗日函数开始一步步介绍如何运用拉格朗日对偶性求解对偶问题的解,从而得到原问题解的过程。也就是我们的第三个问题。
在二次最优化章节中,我们将寻找决策曲面使得几何间隔最大化的问题转化为了可以通过拉格朗日对偶性求得最优解的二次最优化问题,如下:
因为我们是要求关于w的最优化,所以在这一章节中我们将约束条件改为关于w的函数:
为什么将而不是令呢?
因为我们为了通过拉格朗日对偶性求解问题,则原问题的约束条件就需要写成前面提到定义一样的形式即 (这里的x就是w),也就是约束条件转化为小于0的形式即:0,所以令。
对于任一训练样本我们只有这样的一个约束条件,注意前面章节最后提到的从KKT对偶互补条件,我们有,但这只是对于函数间隔正好为1的训练样本(例如,那个对应的约束,即保持等式)。考虑下图,在下图中实线表示最大间隔分离超平面:
如上图我们可以看到那些有着最小间隔的点正是距离决策边界最近的点,图中有三个这样的点,其中一个在负例两个为正例,他们恰好在决策边界两边的虚线上。这些在虚线上的点就是函数间隔为1的训练样本,这些样本点前面的系数就是,由前面分析知道,这些样本是非零(> 0)的,为这些特殊样本点前面系数,其他的的都是=0的。这些特殊的点就是支持向量。事实上这些支持向量的个数要比训练集大小要更小就更有帮助。
下面为我们的优化问题构造拉格朗日运算,在这之前先回顾广义的拉格朗日函数:
对比广义的拉格朗日函数,优化问题也就是上式的,约束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) |
假设我们已经通过SMO算法计算出了w,随之计算出了b,于是我们得到了一个可供预测新样本分类的模型,现在来了一个新的样本需要我们预测,于是我们回到了预测问题,带入:
可得:
观察上式可知,为了预测新样本的分类,我们就必须计算一个量,这个量取决于新样本和所有训练集中的样本的内积和,这个计算不会很大,因为我们从KKT条件可以知道只有支持向量的点,因为我们已经知道支持向量是那些距离最优超平面最近的点,所以这些点不会很多,也就是说大多数的向量点都的系数;从而上式中的大多数项都等于0,我们只需要计算支持向量和新样本即可,所以训练完成后最终的模型只和支持向量有关。
前面我们已经讨论了线性可分模式下的最优超平面的情况,但是在现实中训练集往往是线性不可分的。例如下图所示:
从上图我们可以看到,在二维空间正例和负例是交叉的,但是在三维空间我们就可以找到一个决策曲面将训练样本分隔开来。所以我们希望将在二维空间线性不可分的问题转化到三维去解决,面对现实中更复杂的问题,我们可以抽象的说,将在低维空间线性不可的问题转化为高维空间线性可分的问题,尝试在高维空间去找到这个将正例和负例分隔开来的决策曲面,这样往往比较有效,但是不是绝对的,需要记住这点。
为了将低维的数据(其实也就是向量)映射到高维空间,我们就需要映射函数的表示,我们这里将它统一的表示为:
向量的维度也就是说向量的长度,例如幼儿做儿童保健的时候需要看一些指标来判定儿童的生长状况{身长,体重,脑颅宽度,囟门}等,这里我们说指标数据是四维的。
一个房子要评估它的价格有几个特征可以参考如{面积,房间个数,厕所个数}等,这里的特征数据就是三维的。
特别的如果输入向量有m维,则可以表示为:
接下篇:SVM-支持向量机原理详解与实践之3