林轩田之机器学习课程笔记( embedding numerous feature之kernel support vector machine)(32之19)

欢迎转载,可以关注博客:http://blog.****.net/cqy_chen
题目可能不全,因为有字数限制,不好意思,可以参考:
https://www.csie.ntu.edu.tw/~htlin/course/ml15fall/

概要

上次讲到了SVM的对偶形式,可以通过求解SVM的对偶问题来求解SVM。主要是当进行高维度的特征映射,很难求解,故而通过对偶方式固定参数,但是上节中还有个问题,虽然参数固定了,但是高维度的映射却是潜藏在了Q矩阵中。本节就该问题进行讨论。

核技巧

如下图就是我们所遗留的问题:
林轩田之机器学习课程笔记( embedding numerous feature之kernel support vector machine)(32之19)
我们首先是通过映射,然后再求解的映射之后的点积。这样就导致了计算的问题,我们能不能绕过映射直接在原始的空间中求解,再变换下得到结果呢?
原问题是先通过映射到高维空间,然后在高维空间求解得到zTnzn,现将其转换为先在原始空间求解
这里先以一个二次式为例:
设原始空间中:x=[x1,x2,......xd]T,转换函数为ϕ2(x),将其映射到二次式。如下:

ϕ2(x)=[1,x1,x2,......xd,x21,x1x2,x1x3,....x1xd,x22.....x2d]T

那么考虑任意的两个转换之后的向量乘积:
ϕ2(x)ϕ2(x)=1+n=1dxnxn+n=1dm=1dxnxmxnxm=1+n=1dxnxn+n=1dxnxnm=1dxmxm=1+xTx+(xTx)(xTx)

所以我们看到我们可以先在原始空间中计算好,xTx然后直接得到高维映射后的内积。我们把这样的方式定义为kernel,每一个kernel函数对应着一个转换。比如上面所示:
kϕ(x,x)=ϕ(x)ϕ(x)kϕ2=1+(xTx)+(xTx)2

所以kernel的目的就是先在原始空间中做完内积,然后通过kernel函数转换到高维空间的内积。
当我们采用了核函数,那么就可以采用核函数来表示对偶问题的求解啦。

对于Q矩阵:qm,n=ynymznzm=ynymk(xn,xm)
对于b向量:

b=yswTzs=ysn=1Nanznynzs=ysn=1Nanynk(xn,xs)

同理,我们得到最后的函数为:
gsvm(x)=sign(n=1Nanynk(xn,x)+b)

所以我们通过核函数解决了要先映射到高维度空间求解内积的问题。
那么我们如何来确定核函数呢?下面来讲解。

多项式核

同样以上面的二次式的转换为例:

ϕ2(x)=[1,x1,x2,......xd,x21,x1x2,x1x3,....x1xd,x22.....x2d]T

我们重新定义一个新的转换:
ϕ2(x)=[1,2x1,2x2,......2xd,x21,x1x2,x1x3,....x1xd,x22.....x2d]T

这样我们得到核函数:k(x,x)=1+2xTx+(xTx)2
再改变下映射:
ϕ2(x)=[1,2γx1,2γx2,......2γxd,γx21,γx1x2,γx1x3,....γx1xd,γx22.....γx2d]T

得到高斯函数:
k(k,k)=(1+γxTx)2

这个式子的计算一般比上面的更简洁,所以更常用。
虽然上面都是做了二次转换,但是根据转换的不同,会得到不同的几何空间。这样得到的结果可能不一样:
林轩田之机器学习课程笔记( embedding numerous feature之kernel support vector machine)(32之19)

最后给出多项式的核函数表示:

k2(x,x)=(ζ+γxTx)2,ζ0;γ>0k2(x,x)=(ζ+γxTx)3,ζ0;γ>0k2(x,x)=(ζ+γxTx)4,ζ0;γ>0qk2(x,x)=(ζ+γxTx)q,ζ0;γ>0

这些就是多项式的转换,那么有映射到无限维度的么?下面讲解。

高斯核

我们上面已经知道,我们可以将原始数据映射到高维空间,但是呢,感觉还是不够,能不能映射到无限维?
想象一下泰勒展开式,比如ex
现在假设这样一个核函数:k(x,x)=e(xx)2.

k(x,x)=e(xx)2=ex2ex2e2xTx=ex2ex2(n=0+(2xx)nn!)()=n=0+ex2ex22n!xn2n!xn=ϕ(x)ϕ(x)

若:ϕ(x)=ex2(1,21!x,42!x2,......)
所以我们得到高斯核,稍微经过变换如下:
k(x,x)=eγ||xx||2,γ>0

可以通过高斯的kernel将特征映射到无限维中去。
带入到SVM目标函数中得到:
gsvm(x)=sign(n=1Nanynk(xn,x)+b)=sign(n=1Nanyneγ||xxn||2+b)

采用高斯核来说明这个过程就是:
1)看过程:通过将资料点映射到无限维度中,然后找一个胖胖的边界作为分割线。
2)看结果:通过高斯核函数,SVM其实就是支持向量点的高斯函数的线性组合。这个也成为:RBF(Radio Base Function)

所以可以从这两个角度去理解SVM的高斯核函数。
通过SVM我们可以得到的好处就是,边界是胖胖的,减少了假设空间,同时通过映射,这样增大了假设空间。所以SVM要调节好核函数,不然还是会过拟合的呢。
如下图:
林轩田之机器学习课程笔记( embedding numerous feature之kernel support vector machine)(32之19)

因为时刻要记住VC维理论,一方面VC减小,一方面通过核函数导致参数增多,空间增大。所以要想最后的Eout变小,需要调节核函数,如果得到的结果欠拟合,可以通过增大核函数来增大模型复杂度,如果过拟合则不能使用太过复杂的核函数

核函数对比

上面讲到了几个核函数,这里进行对比下:

Tables 好处 坏处
线性核 简单,计算快 模型复杂度低,无法区分复杂数据
多项式核 计算复杂,超参数选择困难 模型复杂度高,一般采用2次,3次就好了
高斯核 模型复杂度非常高,映射到无限维度 容易过拟合

不管是机器学习还是做人看来都要是中庸之道啊,一方面要模型更好的拟合数据,那么就要采用复杂的映射,但是容易过拟合。

核函数当然不止只有上面的三种,核函数其实表示的是x映射到高维空间的相似性。但是不是只要是相似性就可以用来表示核函数。
首先定义下核矩阵:

ϕ(x1)ϕ(x1)ϕ(x2)ϕ(x1)......ϕ(xd)ϕ(x1)ϕ(x1)ϕ(x2)......ϕ(x2)ϕ(x2)......ϕ(xd)ϕ(x2)......ϕ(x1)ϕ(xd)ϕ(x2)ϕ(xd)ϕ(xd)ϕ(xd)

即:
k(x1,x1)k(x2,x1)......k(xd,x1)k(x1,x2)......k(x2,x2)......k(xd,x2)......k(x1,xd)k(x2,xd)k(xd,xd)

得到[z1,z2,......zn]T[z1,z2,......zn]=zzT所以这个是半正定的。充分条件也是这个,但是证明比较难,就不详细写了。

这里只说下核函数的充要条件是半正定的

本节介绍了核函数,但是我们前面讲的都是hard-margin,数据要是线性可分的,但是不可分的呢?

预知后事如何,请听下回分解。

欢迎转载,可以关注博客:http://blog.****.net/cqy_chen