在SVM我们经常不是直接使用样本的原始属性(attribute),假如x是某样本的一个属性,我们经常用到类似
x2,x3
等。就像在线性回归问题中,当我们需要拟合出一个曲线时就可能用到
x,x2,x3
等。此时就相当于是把
x
映射到
注:之所以映射,主要是因为:有时样本在当前维度不易分类,此时可以将其映射到更高的维度。比如上式由一维变成了三维
在SVM中,我们将使用映射后的特征,而不是最初的属性,因此,我们需要将前面 wTx+b 公式中 x用ϕ(x) 代替,内积从 <xi,x> <script type="math/tex" id="MathJax-Element-202"> </script> 映射到 <ϕ(xi),ϕ(x)> <script type="math/tex" id="MathJax-Element-203"><\phi (x^i), \phi (x)></script>。
这样对于任意的内积
<x,z>
<script type="math/tex" id="MathJax-Element-204">
</script>,我们都将用
<ϕ(x),ϕ(z)>
<script type="math/tex" id="MathJax-Element-205"><\phi(x),\phi(z)></script>代替。
下面定义核函数(Kernel):
这样对于任意的内积 <x,z> <script type="math/tex" id="MathJax-Element-207"> </script>,我们可以用 K(x,y) 代替。有趣的是 K(x,z) 的计算代价并不大,因为我们并不需要计算出 ϕ(x) 。
我们看下面的例子:
假设 x,z,∈Rn,考虑:K(x,z)=(xTz)2
我们也可以写成下面的形式:
这就是说,我们可以将 ∑ni,j=1(xixj) 看作 ϕ(x) ,将 ∑ni,j=1(zizj) 看作 ϕ(z) 。
因此,上式就等于: ϕ(x)Tϕ(z)
现在看一下映射函数( n=3 时),根据上面的公式,得到:
显然,这里将 x映射到这样的ϕ(x) 的时间复杂度是 n2 。而事实证明,我们并不需要求计算x的内积( ϕ(x) )或z的内积( ϕ(z) )去做映射,而只需要计算x与z的内积的平放( (xTz)2 )即可。
注:
1、这里是假设我们所做的映射 ϕ 是取x的内积,而此时刚好可以用 (xTz)2 来代替 ϕ(x)Tϕ(z) ,即此时可以使用核函数 K(x,z)=(xTz)2 。
再看一个核函数:
它对应的映射函数( n=3 时)是:
更一般地,核函数 K(x,z)=(xTz+c)d 对应的映射后特征维度为 (n+dd) 。
下面让我们看一个与之前不同的核函数:
首先,考虑这样一个问题:我们一直在计算
ϕ(x)Tϕ(z)
,也就是两个向量的内积,回想一下余弦相似度。
如果两个向量x,z的夹角越小,即它们越相似,则它们的内积越大,此时我们就会希望核函数越大;反之,我们就希望核函数越小。即核函数的大小反应了x,z的相似度。因此我们就可以选择下面的核函数:
我们可以用它的结果来表示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+b
就变成了
wTϕ(x)+b
,是否先要找到
ϕ(x)
,然后再预测?答案肯定不是了,找
ϕ(x)
很麻烦,回想我们之前说过的:
我们只需要将 <xi,x> <script type="math/tex" id="MathJax-Element-239"> </script>替换成 K(xi,x) 即可,然后结果的判断同上。