斯坦福大学公开课 :机器学习课程(Andrew Ng)——6、监督学习:Support Vector Machine,破

来源:互联网 发布:殖民地知乎 编辑:程序博客网 时间:2024/04/29 04:07

6)拉格朗日对偶(Lagrange duality)

7)最优间隔分类器(optimal margin classifier)

8)核函数(Kernel)

9)核函数的有效性



6)拉格朗日对偶(Lagrange duality)

先抛开上一节的二次规划(最小值)问题

对于存在等式约束的极值问题求解,通过引入拉格朗日算子构造拉格朗日公式就可以完美解决。

对于存在不等式约束的极值问题求解,如下:    clip_image007[6]    

我们定义更一般化的拉格朗日公式:clip_image008[6]

因为我们求解的是最小值,而这里的clip_image014[6]已经不严格等于0,而是小于等于0,我们虽然可以将clip_image010[51]调整成很大的正值以使函数的结果是负无穷,但这种“虚假最小值”并不是我们想要的,因此我们为了排除这种情况定义下面的函数:

    clip_image015[6]这里的P代表primal。

进一步分析(假设clip_image017[6]或者clip_image019[6],那么我们总是可以调整clip_image010[52]clip_image012[15]来使得clip_image021[10]有最大值为正无穷。而只有g和h同时满足约束时,clip_image021[11]才有最小值f(w),这时gi和hi都等于0。)可知:

    clip_image024[6]

这样我们原来要求解的二次规划(最小值)问题min f(w)可以转换成求clip_image026[10]。而clip_image026[10]可以进一步转换为:

clip_image027[6] 

如果直接求解上式,首先要面对两个参数,且clip_image010[53]是不等式约束,然后还要在w上求最小值。这个过程不容易做,所以我们引入该问题的对偶形式:

clip_image034[6]

相对于原问题,对偶问题只是更换了min和max的顺序,而一般更换顺序的结果是Max Min(X) <= MinMax(X),即:

clip_image037[6]

通过引入的对偶形式,我们只要找到clip_image042[14]使d*=p*,那么这组clip_image042[14]中的W*肯定就是我们原来要求解的二次规划(最小值)问题min f(w)的解了,那么怎么找这组clip_image042[14]?根据当前知识,我们只知道:假设存在clip_image042[14]使得clip_image044[14]是原问题的解,clip_image046[6]是对偶问题的解,如果clip_image042[16]满足了库恩-塔克条件(Karush-Kuhn-Tucker, KKT condition),那么他们就是原问题和对偶问题的解(即,使原问题和对偶问题等价)。下面给出库恩-塔克条件(Karush-Kuhn-Tucker, KKT condition):

clip_image048[6]

公式(5)称为KKT dual complementarity(KKT对偶互补)条件。这个条件隐含了如果clip_image050[6],那么clip_image052[10],此时的w*正处于可行域的边界上(正好取到“=0”),之后我们会明白,gi(w)=0才是真正起作用的约束;而其他位于可行域内部(clip_image054[6])的点对应的clip_image056[6],之后我们会明白,gi(w)<0都是不起作用的约束。这个KKT双重补足条件会用来解释支持向量和SMO的收敛测试。

KKT的总体思想是:极值会在可行域边界上取得,也就是在不等式等于0的gi(w)约束或等式hi(w)约束里取得,而最优下降方向一般是这些“不等式等于0的gi(w)约束或等式hi(w)约束”的线性组合。对于在可行域边界内(clip_image054[6])的点,对最优解不起作用,因此前面的系数clip_image056[6]


7)最优间隔分类器(optimal margin classifier)

上一节中我们只是给出了clip_image042[14]满足KKT条件就是原问题和对偶问题的解的结论,但实际上并没有告诉我们具体怎么求clip_image042[14]。这里我们仍然不给出具体求解clip_image042[14]的方法,但只是告诉我们,如果求出了α*(对于α*的具体求解方法,我们交给下一节的SMO算法),那么就可以求出β*,进而求出w*下面我们看一下这些结论是怎么得到的。


从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数clip_image060[14],对应的约束式为clip_image062[6],对于其他的不在线上的点(clip_image064[6]),极值不会在他们所在的范围内取得,因此前面的系数clip_image066[14]。看下面的图:

    clip_image067[6]

实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,那么他们前面的系数clip_image060[15],其他点都是clip_image066[15]。这三个点称作支持向量


重新回到SVM的最初优化问题:

    clip_image057[6]

我们将约束条件改写为:    clip_image058[6]构造拉格朗日函数如下:    

    clip_image068[6]这里只有clip_image010[54]没有clip_image012[16]是因为原问题中没有等式约束,只有不等式约束。

下面我们按照对偶问题的求解步骤来一步步进行:

对于对偶问题clip_image069[10],我们分为最小化clip_image070[10]和最大化min L(w,b,α)两步。

首先求解clip_image070[10]的最小值,我们先固定clip_image010[55],那么clip_image070[11]的最小值只与w和b有关,对w和b分别求偏导数:

    clip_image071[6]  (d1)            clip_image072[6](d2)

化简(d1)得到:    clip_image073[6],将该式带回到构造的拉格朗日函数中,化简(化简过程参考:http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982684.html)得到:

clip_image075[6]。注意虽然写的是L(w,b,α),实际上却是L(w,b,α)关于自变量w的最小值(目标函数是凸函数)。


接着是极大化上面求得关于自变量w的最小值函数clip_image075[6]

clip_image078[6]这里我们将向量内积clip_image076[6]表示为clip_image077[6]


其实它是满足KKT条件的,所以,一定存在clip_image080[6]使得clip_image044[15]是原问题的解,clip_image082[10]是对偶问题的解。

同样的,clip_image082[10]的求解留给下一节的SMO算法。这里仅仅假设已经求出了clip_image082[10],那么根据clip_image083[6]即可求出clip_image044[16](原问题的解),进而求出

    clip_image084[6]即离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔



最后考虑一个“题外话”,将前面求解中得到的    clip_image086[6]带入clip_image088[6]得:

    clip_image089[6]

也就是说,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0来判断是正例还是负例。现在有了clip_image010[61],我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的clip_image060[16],其他情况clip_image066[16]。因此,我们只需求新来的样本和支持向量的内积,然后运算即可。这种写法为下面要提到的核函数(kernel)做了很好的铺垫。


8)核函数(Kernel)

考虑“线性回归”问题,假设我们从样本点的分布中看到x和y符合3次曲线,那么我们希望使用x的三次多项式来逼近这些样本点。那么首先需要将特征x扩展到三维clip_image002[6],然后寻找特征和结果之间的模型。我们将这种特征变换称作特征映射(feature mapping)。映射函数称作clip_image004[10],在这个例子中

clip_image006[6]

我们希望将得到的映射后的特征应用于SVM分类,而不是最初的属性。这样,我们需要将前面clip_image008[4]公式中的内积从clip_image010[16],映射到clip_image012[42]。将核函数形式化定义,如果原始属性内积是clip_image014[4],映射后的特征内积为clip_image016[6],那么定义核函数(Kernel)为clip_image018[8]

除了从属性向特征的映射的角度理解核函数外,领悟核函数的另一种视角是:由于计算的是内积,我们可以想到余弦相似度,如果x和z向量夹角越小,那么核函数值越大,反之,越小。因此,核函数clip_image018[8]的值可以看做是clip_image020[11]clip_image041[4]相似度的度量。

到这里,我们可以得出结论,要使用核函数,只需先计算clip_image020[10],然后计算clip_image022[10]即可,然而这种计算方式是非常低效的,那么我们能不能想办法减少计算时间呢?为了回答这个问题,我们先看一个核函数:clip_image028[4],假设x和z都是n维的,那么展开后得:

clip_image030[4],这个时候发现我们可以只计算原始特征x和z内积的平方(时间复杂度是O(n)),就等价与计算映射后特征的内积,也就是说我们不需要花clip_image026[7]时间了。

另一个经典核函数是:clip_image042[6],如果x和z很相近(clip_image044[6]),那么核函数值为1,如果x和z相差很大(clip_image046[6]),那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。既然高斯核函数能够比较x和z的相似度,并映射到0到1,回想logistic回归,sigmoid函数可以,因此还有sigmoid核函数等等。


至于为什么需要映射后的特征而不是最初的属性面提到的(从样本点的分布中看到x和y符合3次曲线,能更好拟合)是其中一个原因,另外的一个重要原因是样例可能存在线性不可分的情况,而将属性映射到高维空间后,特征往往就可分了。(在《数据挖掘导论》Pang-Ning Tan等人著的《支持向量机》那一章有个很好的例子说明)。下面有张图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数。

clip_image048[6]

来自Eric Xing的slides

注意,使用核函数后,怎么分类新来的样本呢?线性的时候我们使用SVM学习出w和b,新来样本x的话,我们使用clip_image050[8]来判断,如果值大于等于1,那么是正类,小于等于1是负类。在两者之间,认为无法确定。如果使用了核函数后,clip_image050[9]就变成了clip_image052[6],是否先要找到clip_image054[8],然后再预测?答案肯定不是了,找clip_image054[9]很麻烦,回想上一节说过的clip_image055[4],只需将clip_image057[4]替换成clip_image059[6],然后值的判断同上。


9)核函数的有效性

问题:给定一个函数K,我们能否使用K来替代计算clip_image022[11]?也就说,对于某个给定的核函数例如clip_image063[8],是否能够找出一个函数映射clip_image061[12],使得对于所有的x和z,都有clip_image018[9]?也可以说,怎样判断给出的核函数K是不是一个有效的核函数(为什么要判断某个核函数是不是有效地呢?因为核函数是我们根据经验和所要处理的问题自己定义的,这就需要我们检验定义的正确性!)。

解决这个问题前,先给出核函数矩阵(Kernel Matrix)的定义:给定m个训练样本clip_image065[6],每一个clip_image067[8]对应一个特征向量,我们将任意两个clip_image067[9]clip_image069[6]带入核函数K中得到clip_image071[6]。i可以从1到m,j可以从1到m,这样可以计算出m*m的矩阵K称为核函数矩阵(Kernel Matrix)。这里,我们将核函数矩阵和核函数都使用K来表示。经过一些列推导我们可以得到:如果K是个有效的核函数(即clip_image073[11]clip_image080[6]等价),那么,在训练集上得到的核函数矩阵K应该是半正定的(clip_image082[6])。

这样我们得到一个核函数的必要条件:K是有效的核函数 ==> 核函数矩阵K是对称半正定的。      其实这个条件也是充分的,由Mercer定理给出:

Mercer定理:

如果函数K是clip_image084[26]上的映射(也就是从两个n维向量映射到实数域)。那么如果K是一个有效核函数(也称为Mercer核函数),那么当且仅当对于训练样例clip_image065[7],其相应的核函数矩阵是对称半正定的。

Mercer定理表明:为了证明K是有效的核函数,那么我们不用去寻找clip_image061[13],而只需要在训练集上求出各个clip_image086[6],然后判断矩阵K是否是半正定(使用左上角主子式大于等于零等方法)即可。

最后说明一点,核函数不仅仅用在SVM上,但凡在一个模型后算法中出现了clip_image090[4],我们都可以常使用clip_image073[12]去替换,这可能能够很好地改善我们的算法。



参考:

http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982684.html

http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988406.html



0 0
原创粉丝点击