您的位置:首页 > Web前端

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

2017-12-30 13:52 567 查看
概要

核技巧

多项式核

高斯核

核函数对比

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

题目可能不全,因为有字数限制,不好意思,可以参考:

https://www.csie.ntu.edu.tw/~htlin/course/ml15fall/

概要

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

核技巧

如下图就是我们所遗留的问题:



我们首先是通过映射,然后再求解的映射之后的点积。这样就导致了计算的问题,我们能不能绕过映射直接在原始的空间中求解,再变换下得到结果呢?

原问题是先通过映射到高维空间,然后在高维空间求解得到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=1dxnx′n+∑n=1d∑m=1dxnxmx′nx′m=1+∑n=1dxnx′n+∑n=1dxnx′n∑m=1dxmx′m=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=ys−wTzs=ys−∑n=1Nanznynzs=ys−∑n=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,2√x1,2√x2,......2√xd,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

这个式子的计算一般比上面的更简洁,所以更常用。

虽然上面都是做了二次转换,但是根据转换的不同,会得到不同的几何空间。这样得到的结果可能不一样:



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

二次式的核函数:k2(x,x′)=(ζ+γxTx′)2,ζ≥0;γ>0三次式的核函数:k2(x,x′)=(ζ+γxTx′)3,ζ≥0;γ>0四次式的核函数:k2(x,x′)=(ζ+γxTx′)4,ζ≥0;γ>0q次式的核函数:k2(x,x′)=(ζ+γxTx′)q,ζ≥0;γ>0

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

高斯核

我们上面已经知道,我们可以将原始数据映射到高维空间,但是呢,感觉还是不够,能不能映射到无限维?

想象一下泰勒展开式,比如ex

现在假设这样一个核函数:k(x,x′)=e−(x−x′)2.

k(x,x′)=e−(x−x′)2=e−x2e−x′2e2xTx′=e−x2e−x′2(∑n=0+∞(2xx′)nn!)(泰勒展开)=∑n=0+∞e−x2e−x′22n!−−−√xn2n!−−−√x′n=ϕ(x)⋅ϕ(x′)

若:ϕ(x)=e−x2(1,21!−−√x,42!−−√x2,......)

所以我们得到高斯核,稍微经过变换如下:

k(x,x′)=e−γ||x−x′||2,γ>0

可以通过高斯的kernel将特征映射到无限维中去。

带入到SVM目标函数中得到:

gsvm(x)=sign(∑n=1Nanynk(xn,x)+b)=sign(∑n=1Nanyne−γ||x−xn||2+b)

采用高斯核来说明这个过程就是:

1)看过程:通过将资料点映射到无限维度中,然后找一个胖胖的边界作为分割线。

2)看结果:通过高斯核函数,SVM其实就是支持向量点的高斯函数的线性组合。这个也成为:RBF(Radio Base Function)

所以可以从这两个角度去理解SVM的高斯核函数。

通过SVM我们可以得到的好处就是,边界是胖胖的,减少了假设空间,同时通过映射,这样增大了假设空间。所以SVM要调节好核函数,不然还是会过拟合的呢。

如下图:



因为时刻要记住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.csdn.net/cqy_chen
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐