您的位置:首页 > 其它

SVM-4-核函数

2016-03-23 00:30 369 查看
参考http://www.cnblogs.com/jerrylead

在SVM我们经常不是直接使用样本的原始属性(attribute),假如x是某样本的一个属性,我们经常用到类似x2,x3x^2,x^3等。就像在线性回归问题中,当我们需要拟合出一个曲线时就可能用到x,x2,x3x,x^2,x^3等。此时就相当于是把xx映射到x,x2,x3x,x^2,x^3(我们称它们为特征(features)),用x,x2,x3x,x^2,x^3代替了xx。我们用下式表示这种映射:

ϕ(x)=⎡⎣⎢xx2x3⎤⎦⎥
\phi(x)=
\left [ \begin{array}{ccc}
x \\ x^2 \\ x^3
\end{array} \right ]
\\

注:之所以映射,主要是因为:有时样本在当前维度不易分类,此时可以将其映射到更高的维度。比如上式由一维变成了三维

在SVM中,我们将使用映射后的特征,而不是最初的属性,因此,我们需要将前面 wTx+bw^Tx+b 公式中x用ϕ(x)x用\phi(x)代替,内积从<xi,x> 映射到<ϕ(xi),ϕ(x)><\phi (x^i), \phi (x)>。

这样对于任意的内积<x,z>,我们都将用<ϕ(x),ϕ(z)><\phi(x),\phi(z)>代替。

下面定义核函数(Kernel):

K(x,z)=ϕ(x)Tϕ(z)K(x,z)=\phi(x)^T\phi(z)\\

这样对于任意的内积<x,z>,我们可以用K(x,y)K(x,y)代替。有趣的是K(x,z)K(x,z)的计算代价并不大,因为我们并不需要计算出ϕ(x)\phi(x)。

我们看下面的例子:

假设x,z,∈Rn,考虑:K(x,z)=(xTz)2x,z,\in\mathbb{R}^n,考虑:\\K(x,z)=(x^Tz)^2

我们也可以写成下面的形式:

K(x,z)=(∑i=1nxizi)⎛⎝∑j=1nxjzj⎞⎠=∑i=1n∑j=1nxizixjzj=∑i,j=1n(xixj)(zizj)K(x,z)=
\left (\sum^n_{i=1}x_iz_i\right )
\left (\sum^n_{j=1}x_jz_j\right )\\
=\sum^n_{i=1}\sum^n_{j=1}x_i z_i x_j z_j\\
=\sum^n_{i,j=1}(x_i x_j)(z_i z_j)\\

这就是说,我们可以将∑ni,j=1(xixj)\sum^n_{i,j=1}(x_i x_j)看作ϕ(x)\phi(x),将∑ni,j=1(zizj)\sum^n_{i,j=1}(z_i z_j)看作ϕ(z)\phi(z)。

因此,上式就等于:ϕ(x)Tϕ(z)\phi(x)^T\phi(z)

现在看一下映射函数( n=3 时),根据上面的公式,得到:

ϕ(x)=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢x1x1x1x2x1x3x2x1x2x2x2x3x3x1x3x2x3x3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
\phi(x)=
\left [
\begin{array}{c}
x_1 x_1\\x_1 x_2\\x_1 x_3\\
x_2 x_1\\x_2 x_2\\x_2 x_3\\
x_3 x_1\\x_3 x_2\\x_3 x_3\\
\end{array}
\right ]

显然,这里将x映射到这样的ϕ(x)x映射到这样的\phi(x)的时间复杂度是n2n^2。而事实证明,我们并不需要求计算x的内积(ϕ(x)\phi(x))或z的内积(ϕ(z)\phi(z))去做映射,而只需要计算x与z的内积的平放((xTz)2(x^Tz)^2)即可。

注:

1、这里是假设我们所做的映射ϕ\phi是取x的内积,而此时刚好可以用(xTz)2(x^Tz)^2来代替ϕ(x)Tϕ(z)\phi(x)^T\phi(z),即此时可以使用核函数K(x,z)=(xTz)2K(x,z)=(x^Tz)^2。

再看一个核函数:

K(x,z)=(xTz+c)2=∑i,j=1n(xixj)(zizj)+∑i=1n(2c−−√xi)(2c−−√zi)+c2K(x,z)=(x^Tz+c)^2
=\sum^n_{i,j=1}(x_i x_j)(z_iz_j)+
\sum^n_{i=1}(\sqrt{2c}x_i)(\sqrt{2c}z_i)+c^2

它对应的映射函数( n=3 时)是:

ϕ(x)=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢x1x1x1x2x1x3x2x1x2x2x2x3x3x1x3x2x3x32c−−√x12c−−√x22c−−√x3c⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
\phi(x)=
\left [
\begin{array}{ccc}
x_1 x_1\\x_1 x_2\\x_1 x_3\\
x_2 x_1\\x_2 x_2\\x_2 x_3\\
x_3 x_1\\x_3 x_2\\x_3 x_3\\
\sqrt{2c}x_1 \\
\sqrt{2c}x_2 \\
\sqrt{2c}x_3 \\
c
\end{array}
\right ]

更一般地,核函数K(x,z)=(xTz+c)dK(x,z)=(x^Tz+c)^d对应的映射后特征维度为(n+dd)\left ( \begin{array}{ccc} n+d\\d \end{array} \right )。

下面让我们看一个与之前不同的核函数:

首先,考虑这样一个问题:我们一直在计算ϕ(x)Tϕ(z)\phi(x)^T\phi(z),也就是两个向量的内积,回想一下余弦相似度

如果两个向量x,z的夹角越小,即它们越相似,则它们的内积越大,此时我们就会希望核函数越大;反之,我们就希望核函数越小。即核函数的大小反应了x,z的相似度。因此我们就可以选择下面的核函数:

K(x,z)=exp(−||x−z||22δ2)K(x,z)=\exp \left ( -\frac{||x-z||^2}{2\delta^2} \right )

我们可以用它的结果来表示x,z的相似度。若x和z大小越相近,该函数值越接近1,若x和z相差越大,该函数值越接近0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称 RBF)。它能够把原始特征映射到无穷维。

既然高斯核函数能够比较 x 和 z 的相似度,并映射到 0 到 1,回想 logistic 回归, sigmoid函数可以,因此还有 sigmoid 核函数等等。

注意,使用核函数后,怎么分类新来的样本呢?线性的时候我们使用 SVM 学习出 w 和b,新来样本 x 的话,我们使用 x 来判断,如果值大于等于 1,那么是正类,小于等于是负类。在两者之间,认为无法确定。如果使用了核函数后, wTx+bw^Tx+b就变成了wTϕ(x)+bw^T\phi(x)+b ,是否先要找到ϕ(x)\phi(x),然后再预测?答案肯定不是了,找ϕ(x)\phi(x)很麻烦,回想我们之前说过的:

wTx+b=(∑i=1mαiyixi)Tx+b=∑i=1mαiyi<xi,x>+bw^Tx+b=
\left ( \sum^m_{i=1}\alpha_iy^ix^i
\right )^T x + b\\
= \sum^m_{i=1}\alpha_iy^i+b

我们只需要将<xi,x>替换成K(xi,x)K(x^i,x)即可,然后结果的判断同上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: