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