Kernel
Kernel Function 是一个二元函数 K(v,w)K(v,w)K(v,w),即 K:Rn×Rn→RK:R^n × R^n \rightarrow RK:Rn×Rn→R 。这个二元函数用来计算向量 v,wv,wv,w 之间的 dot product(点积) 。其中 v,wv,wv,w 分别为 nnn 维空间中的一个向量。
二分类问题为例
假设有一个二分类问题,每个样本有两个特征,将所有样本 plot 在二维平面中,如下图所示:
由上图可以看出,样本是线性可分的,使用 Linear SVM 可以很容易找到一个 hyperplane(二维平面中是一条直线) 将样本分开,如下图所示:
如果 DataSet 不是 线性可分的,如下图所示:
则无法在二维平面中找到一条直线,将 DataSet 分开。显然这里我们处理的是非线性可分的数据集。我们能否继续使用 Linear SVM 来处理这个问题。答案是肯定的,低维空间中线性不可分映射到高维空间后,就可能变得线性可分,如下图所示。
原来二维空间中的线性不可分,映射到三维空间中后,就变得线性可分了。
此例中我们要找一个变换 T:R2→R3T:R^2 \rightarrow R^3T:R2→R3 将二维空间中所有样本变换到三维空间中。将所有的 training set XXX 通过 TTT 变换到 X′X^{\prime}X′ ,在 X′X^{\prime}X′ 通过 linear SVM 训练一个分类器 fsvmf_{svm}fsvm ,在测试时,新的样本 xxx 首先通过 TTT 变换到 x′x^{\prime}x′ ,输出的类别由 fsvm(x′)f_{svm}(x^{\prime})fsvm(x′) 决定。
现在的步骤和训练一个正常的 Linear SVM 相同,只是多了一个变换 TTT 。
如上图所示,三维空间中的超平面在二维平面上的投影为非线性的。
概括
数据集 DDD 在 RnR^nRn 空间中线性不可分,当投影到高维空间 Rm(m>n)R^m(m>n)Rm(m>n) 中,可能变得线性可分。 如果把 RnR^nRn 空间的 数据集 DDD 通过一个变换 TTT ,变换到 RmR^mRm 空间上的 D′D^{\prime}D′ ,这样 D′D^{\prime}D′ 就变得线性可分了。通过 linear SVM 就可以在 D′D^{\prime}D′ 上找一个决策边界将 D′D^{\prime}D′ 分开。新的样本 xxx 也要先通过 TTT 变换到 x′x^{\prime}x′ ,再通过决策边界分类。
这意味着,我们可以学习一个 nonlinear SVM ,但依然使用原来 linear SVM 泛化后的表达式。
上面的思想就是机器学习中 “kernel methods” 的动机。
存在的问题
从 RnR^nRn 空间变换到 Rm(m>n)R^m(m>n)Rm(m>n) 空间时,如果 mmm 相对 nnn 来说增长很快,则将数据集 DDD 从 RnR^nRn 空间变换到 RmR^mRm 空间会带来严重的计算和内存问题。例如从二维空间,变换到五维空间时,维度增加了三维。每个样本需要更多的内存来存储,且计算量增大了。
解决之道
nonlinear SVM 似乎没必要真的在高维空间中进行 training 和 testing. 我们只需要在低维空间中计算向量的点乘即可。证明可以参见文末链接的 paper.
为什么这很重要?这证明了在 RnR^nRn 空间中存在一个函数 KKK,将 RnR^nRn 空间中的两个向量 v,mv,mv,m 变换到 RmR^mRm 空间中进行点积运算的结果,和直接将 v,mv,mv,m 向量通过 K(v,m)K(v,m)K(v,m) 计算的结果是一样的。所以没必要通过变换之后再计算。这个函数 KKK 就被称为 kernel function
这意味着:
- 通过使用一个 kernel function K(v,m)K(v,m)K(v,m) ,我们隐式地将 RnR^nRn 空间中的数据变换到高维空间 RmR^mRm 中,没有使用额外的内存且对计算时间的影响最小。对计算时间的额外的开销是计算 K(v,m)K(v,m)K(v,m) ,这依赖于 kernel function K,并且这个可以被 mininal.
- 通过使用 1 我们可以有效地学习一个 nonlinear decision boundaries for SVM ,并且只是简单地将所有 linear SVM 中的 dot product 替换为 K(v,m)K(v,m)K(v,m).
使用 kernel function 去完成 1、2 称为 kernel trick
常见的核函数
Polynomial Kernel
K(x,y)=(x⊤y+c)d
K(x, y)=\left(x^{\top} y+c\right)^{d}
K(x,y)=(x⊤y+c)d
x,yx,yx,y 是输入空间中的向量,ddd 为多项式的次数,ccc 为一个常量
Radial Basis Function (RBF) Kernel
K(x,x′)=exp(−∥x−x′∥222σ2)
K\left(\mathbf{x}, \mathbf{x}^{\prime}\right)=\exp \left(-\frac{\left\|\mathbf{x}-\mathbf{x}^{\prime}\right\|_{2}^{2}}{2 \sigma^{2}}\right)
K(x,x′)=exp(−2σ2∥x−x′∥22)
x,x′x,x^{\prime}x,x′ 为输入空间中的向量,∥x−x′∥22\left\|\mathbf{x}-\mathbf{x}^{\prime}\right\|_{2}^{2}∥x−x′∥22 为两个特征向量之间的平方欧几里得距离。σ\sigmaσ 是一个自由参数。
Sigmoid Kernel
K(x,y)=11+e−(xTy+c)
K(x,y)=\frac{1}{1+e^{-(x^Ty+c)}}
K(x,y)=1+e−(xTy+c)1
x,yx,yx,y 为输入空间中的向量,ccc 为常量
Paper下载地址:https://download.youkuaiyun.com/download/u012219371/11297361