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)即可,然后结果的判断同上。
在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)即可,然后结果的判断同上。
相关文章推荐
- mysql索引失效的几种情况
- DroidPlugin代码分析(二) Hook机制
- 前路漫漫,还是先清醒清醒
- 清除WebSphere部署应用所对应的JSP缓存
- oc-17-description
- 常用排序(稳定性、时间/空间复杂度)
- 一款面试复习应用源码
- 滥用单例
- Mathematica 中 Minimize函数无法找到全局最小值时的解决方法
- 控制表单内容字段必填项的一种设计思路
- 当你访问淘宝的时候,发生了什么?
- Git 教程索引
- 第七届蓝桥杯c/c++ C组部分题解
- ThinkPHP 分页类
- 227. Basic Calculator II | Java最短代码实现
- C++拷贝构造函数
- ubuntu运行android studio出错unable to run mksdcard sdk tool
- epoll的高效实现原理
- 滑雪(记忆化)
- C++ return语句