核方法的自我理解
一直以来,一旦提到kernel method,我就会觉得那是个很高大上的东西,今天静下心来了解了一下,对其有了点自我理解。但涉及具体原理,还需要继续补充。
核方法(Kernel method),最早大家对其认识应该是在SVM里吧。它在SVM中的贡献是如何将二维空间里线性不可分的分类器转换成线性可分的分类器的一种方法。例如,将二维空间中的点
(
x
,
y
)
(x,y)
(x,y)映射到五维空间上
(
x
,
y
,
x
2
,
y
2
,
x
y
)
(x,y,x^2,y^2,x^y)
(x,y,x2,y2,xy)。通过这种映射,二维空间中无法线性可分的点,在五维空间中可能就能被一个曲面所分离,由于涉及高维信息,这个曲面表现出来的就是一个线性函数。在高维空间中,我们可以获得更多的信息,选取到合适的超平面(即高维上的线性表示)来分离不同分类器上的点。
简单来说,核函数是一种将低维空间的信息(或变量)投射到高维矢量空间(或变量)的方法。其本质就是一种空间的映射。
我们采用的这种映射方法就叫做核函数,它有助于我们决定两个空间映射的距离和高度,同时,计算出映射后那个空间的内积。内积又可以作为一种相似性的度量。
对于低维空间
X
\mathcal{X}
X的所有变量
x
\mathrm{x}
x和
x
′
\mathrm{x}'
x′,核函数可以表示为另一个空间
V
\mathcal{V}
V的内积,一般采用
k
:
X
×
X
→
R
\mathcal{k}: \mathcal{X} \times \mathcal{X} \to \mathbb{R}
k:X×X→R来表示核函数。它可以定义为一种“特征映射”
φ
:
X
→
V
\varphi: \mathcal{X} \to \mathcal{V}
φ:X→V(feature mapping),其满足:
k
(
x
,
x
′
)
=
⟨
φ
(
x
)
T
φ
(
x
′
)
⟩
V
\mathcal{k}(\mathrm{x},\mathrm{x'})=\langle \varphi(\mathrm{x})^T\varphi(\mathrm{x'})\rangle_\mathcal{V}
k(x,x′)=⟨φ(x)Tφ(x′)⟩V
我们可以不需要知道
φ
\varphi
φ是什么样子的,只要知道
k
\mathcal{k}
k就可以通过原空间中两个点的内积算得新空间中对应的两个点之间的内积。这个通常作为一个kernel trick在优化算法等中被使用。在kernel trick中,主要的约束就是
⟨
⋅
,
⋅
⟩
V
\langle ·,·\rangle_\mathcal{V}
⟨⋅,⋅⟩V必须是一个合适的内积。
这也是源于核函数要满足的条件——Mercer’s theorem。Mercer定理:任何半正定的函数都可以作为核函数。
几种常见的核函数
-
高斯核(Gaussian Kernel),也称作RBF Kernel,它是一个典型的将原空间投影到无穷维度空间的核函数。其核函数为:
k ( x , y ) = e x p ( − ∥ x − y ∥ 2 2 σ 2 ) , σ ∈ R + \mathcal{k}(x,y)=exp(-\frac{\parallel{ x-y}\parallel^2}{2\sigma^2}),\sigma \in \mathbb{R}^+ k(x,y)=exp(−2σ2∥x−y∥2),σ∈R+ -
polynomial kernel
对于degree-d polynomials, 其核函数定义为:
k ( x , y ) = ( x T y + c ) d \mathcal{k}(x,y)=(x^Ty+c)^d k(x,y)=(xTy+c)d, c ∈ R + , d ∈ N + c\in \mathbb{R}^+,d\in\mathbb{N}^+ c∈R+,d∈N+ -
Mahalanobis Kernel
其核函数定义为:
k ( x , y ) = e x p ( − ( x − y ) ′ Σ ( x − y ) ) \mathcal{k}(x,y)=exp\left(-(x-y)'\Sigma(x-y)\right) k(x,y)=exp(−(x−y)′Σ(x−y)), Σ = d i a g ( σ 1 − 2 , … , σ N − 2 ) , σ 1 , … , σ N ∈ R + \Sigma = diag(\sigma_{1}^{-2},\dots,\sigma_{N}^{-2}), \sigma_{1},\dots,\sigma_{N}\in \mathbb{R}^+ Σ=diag(σ1−2,…,σN−2),σ1,…,σN∈R+
[1]: Kernel method: https://en.wikipedia.org/wiki/Kernel_method
[2]: 机器学习中的核方法:https://blog.csdn.net/baimafujinji/article/details/79372911