跳到主要内容

核函数:不用显式升维,也能学习非线性结构

很多机器学习教材会用一句话介绍核函数:把数据映射到高维空间,再做线性学习。这句话没有错,但容易留下三个疑问:

  1. 为什么升维以后,原来分不开的数据就可能分开?
  2. 维度升高不是会让计算更昂贵吗?
  3. 核函数为什么只算两个样本之间的相似度,就能代替高维映射?

这篇文章从内积出发,逐步推导核技巧,并以核 PCA 为例说明核函数如何把同心圆这样的非线性结构“展开”。

1. 线性模型的边界在哪里​

二维线性分类器可以写成

令 ,得到的是一条直线;在更高维空间里,它是一个超平面。因此,线性模型擅长处理“能被一刀切开”的数据。

同心圆却不能被一条直线分开。无论怎样旋转直线,总会同时穿过内环和外环。

不过,圆环的类别实际上与半径有关:

如果定义一个新特征

那么二维平面里的内外圆环,在新的一维特征轴上会落在不同区间。只要选择一个阈值 ,就可以用

把它们分开。

这揭示了非线性学习的一个基本思路:模型可以在新特征空间中保持线性,而非线性由特征映射 提供。

2. 从特征映射到核函数​

设原始输入为 ,通过映射

进入新的特征空间 。在该空间里,线性模型写成

许多算法并不需要单独知道 的每一个坐标,只需要计算样本在特征空间中的内积:

如果存在一个函数,可以直接从原始输入算出这个内积,便定义

这里的 就是核函数。它的关键价值不是“计算相似度”这句话本身,而是:

用原空间中的一次核函数计算,替代特征空间中的显式映射和内积计算。

这就是核技巧(kernel trick)。

3. 一个能完全展开的例子:二次多项式核​

对二维向量 和 ,考虑二次多项式核

将它展开:

定义显式特征映射

就有

原始数据只有两个特征,显式映射后却有六个特征。实际计算时,我们不必真的构造这六维向量,只需计算 。

当多项式次数和原始维度增大时,显式特征的数量会迅速膨胀,而核函数仍可以保持紧凑。这正是核技巧节省计算的地方。

4. RBF 核为什么像一个无限维特征映射​

RBF(Radial Basis Function)核,也叫高斯核:

它也常写成

所以两个参数的关系是

4.1 从相似度理解​

  • 当 时,距离为 ,所以 ;
  • 两点距离越远,核值越接近 ;
  • 越大,相似度随距离衰减得越快,模型越关注局部邻域;
  • 越小,相似度衰减得越慢,模型看到的结构越平滑。

4.2 从泰勒展开理解“无限维”​

先看一维情形:

利用指数函数的泰勒展开

可以得到

把方括号中的每一项看成特征坐标,就得到一个包含 的无限维特征映射。RBF 核直接给出了这些无限维特征的内积,却不要求我们显式保存它们。

需要注意:所谓“升到无限维”是数学表示,不等于程序真的创建了一个无限长数组。

5. 什么样的函数才能作为核函数​

不是任意相似度函数都能安全地放进核算法。对任意样本 ,构造 Gram 矩阵

一个合法的实值核通常需要满足:

  1. 对称性:;
  2. 半正定性:对任意 ,都有

为什么要求半正定?如果 ,那么

因此,半正定性保证了核矩阵确实可以被解释为某个特征空间中的内积矩阵。

常用核包括:

核函数公式直观含义
线性核不做非线性映射
多项式核引入有限阶特征交互
RBF 核强调局部邻域,特征空间可视为无限维
Sigmoid 核形式类似神经元激活,但并非所有参数都保证半正定

6. 核 PCA 的推导​

普通 PCA 在原空间中寻找方差最大的线性方向。核 PCA(Kernel PCA,KPCA)则先考虑特征映射 ,再在特征空间中做 PCA。

6.1 特征空间中的协方差算子​

设共有 个样本,映射后的中心化特征为

特征空间的协方差算子是

PCA 要解特征值问题

最优方向 一定落在训练样本张成的子空间中,因此可写成

6.2 把未知的高维向量换成核矩阵​

定义中心化核矩阵

把 的展开式代入 ,并分别与每个 做内积,可以得到

在非零特征值对应的子空间中,约去一个 :

令 ,核 PCA 最终只需要求解

这与普通 PCA 的矩阵特征值问题形式相同,只不过协方差矩阵被核矩阵替代了。

6.3 核矩阵为什么要中心化​

原始核矩阵为 ,令

则中心化核矩阵为

因为如果把所有映射后的样本按行组成矩阵 ,那么中心化后的矩阵是 ,于是

6.4 如何得到降维坐标​

若 是 的单位特征向量,对应特征值为 ,那么训练样本在第 个核主成分上的坐标为

对新样本 ,先计算它与全部训练样本的核值并按训练集均值进行中心化,得到向量 ,再计算

因此,训练和预测阶段都只涉及核值,不需要显式写出 。

7. 实验:普通 PCA 与 RBF 核 PCA​

下面生成两个带噪声的同心圆。原始空间只有二维,所以保留两个主成分的普通 PCA 本质上只是旋转和缩放坐标,不可能把环形拓扑变成一条直线可分的结构。

RBF 核 PCA 则根据样本间的局部相似度重新组织坐标。在本实验中,,对应

线性 PCA 与 RBF 核 PCA 处理同心圆数据的对比

从图中可以看到:

  • 原始空间中,内环和外环不能被直线分开;
  • 普通 PCA 仍然保留两个互相嵌套的圆环;
  • RBF 核 PCA 后,外环在左侧形成紧凑簇,内环被展开到右侧,沿 KPC1 已出现明显间隔。

这里要避免一个常见误解:KPCA 的目标是保留特征空间中的最大方差,而不是直接最大化类别间隔。这个例子中变换后恰好容易分类,不代表任意数据经过 KPCA 都一定更可分。

完整代码​

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles
from sklearn.decomposition import KernelPCA, PCA

# 生成环形数据集
X, y = make_circles(
n_samples=400,
noise=0.05,
factor=0.3,
random_state=42,
)

# 线性 PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# RBF 核 KPCA
# gamma 对应 RBF 公式里的 gamma = 1 / (2 sigma^2)
kpca = KernelPCA(
n_components=2,
kernel="rbf",
gamma=8,
random_state=42,
)
X_kpca = kpca.fit_transform(X)

# 绘图
fig, axes = plt.subplots(1, 3, figsize=(15, 4.5))

axes[0].scatter(
X[y == 0, 0], X[y == 0, 1],
c="tab:blue", alpha=0.7, label="类别 0",
)
axes[0].scatter(
X[y == 1, 0], X[y == 1, 1],
c="tab:orange", alpha=0.7, label="类别 1",
)
axes[0].set_title("原始二维空间(线性不可分)")
axes[0].set_xlabel(r"$x_1$")
axes[0].set_ylabel(r"$x_2$")
axes[0].legend()
axes[0].grid(alpha=0.3)

axes[1].scatter(
X_pca[y == 0, 0], X_pca[y == 0, 1],
c="tab:blue", alpha=0.7,
)
axes[1].scatter(
X_pca[y == 1, 0], X_pca[y == 1, 1],
c="tab:orange", alpha=0.7,
)
axes[1].set_title("普通 PCA(线性投影,仍不可分)")
axes[1].set_xlabel("PC1")
axes[1].set_ylabel("PC2")
axes[1].grid(alpha=0.3)

axes[2].scatter(
X_kpca[y == 0, 0], X_kpca[y == 0, 1],
c="tab:blue", alpha=0.7,
)
axes[2].scatter(
X_kpca[y == 1, 0], X_kpca[y == 1, 1],
c="tab:orange", alpha=0.7,
)
axes[2].set_title("RBF 核 PCA(非线性结构被展开)")
axes[2].set_xlabel("KPC1")
axes[2].set_ylabel("KPC2")
axes[2].grid(alpha=0.3)

plt.tight_layout()
plt.savefig(
"docs/数学/images/kernel-pca-circles.png",
dpi=220,
bbox_inches="tight",
)
plt.show()

8. 到底控制什么​

对 RBF 核来说, 决定单个样本的“影响半径”。

太小​

此时 很大,很多相距较远的样本也被认为相似。核矩阵中的元素普遍接近,复杂结构会被过度平滑,效果趋近于欠拟合。

太大​

此时 很小,只有非常接近的样本才被认为相似。模型可能把数据切成许多局部小块,对噪声敏感,效果趋近于过拟合。

实践建议​

  1. 先标准化特征,否则数值范围大的维度会主导欧氏距离;
  2. 可从 或 附近开始搜索;
  3. 有监督任务用交叉验证选择 和正则化参数;
  4. 无监督 KPCA 可结合重建效果、下游任务表现和可视化判断,而不要只挑“看起来最分开”的结果。

9. 核技巧的代价​

核方法避免了显式高维特征,却没有让计算成本消失。对于 个样本:

  • 核矩阵需要 存储;
  • 完整特征值分解通常需要 时间;
  • 新样本预测往往要与大量训练样本计算核值。

所以经典核方法适合中小规模、非线性明显的数据。样本达到几十万甚至更多时,常见替代方案包括:

  • Nyström 近似;
  • 随机傅里叶特征;
  • 线性模型配合显式非线性特征;
  • 神经网络。

这些方法的共同思想,是用有限计算近似核函数所代表的丰富特征空间。

10. 总结​

核函数可以浓缩为四步:

  1. 原空间中的线性模型表达能力有限;
  2. 通过 把数据映射到更适合线性处理的特征空间;
  3. 如果算法只依赖内积,就用 替代显式映射;
  4. 在核 PCA、核 SVM 等算法中,用核矩阵完成原本发生在高维空间中的运算。

核技巧并没有凭空制造信息。它做的是换一种几何表示,让原本弯曲、环绕或局部聚集的结构,在新的坐标系里更容易被线性方法利用。

参考资料​

  1. Bernhard Schölkopf, Alexander Smola, Klaus-Robert Müller. Nonlinear Component Analysis as a Kernel Eigenvalue Problem. Neural Computation, 1998.
  2. Bernhard Schölkopf, Alexander J. Smola. Learning with Kernels. MIT Press, 2002.
  3. Trevor Hastie, Robert Tibshirani, Jerome Friedman. The Elements of Statistical Learning, Chapter 5 and Chapter 14.