📑 本页目录(点开跳转)
06 · 核技巧:不用算就能算
⏱ 24 分钟 | ⭐⭐ 机器学习里最优雅的想法
🎯 一句话
想在高维空间里干活,但高维算不动(第 5 章)。 核技巧:不去那个高维空间,却拿到在那里计算的结果。
🧠 一、问题:线性不可分怎么办
图下说明
- 一维数据,线性不可分:
- ○ ○ ○ ● ● ● ○ ○ ○ 一刀切不开(中间是●,两边是○)
- 把它映射到二维:φ(x) = (x, x²)
- x² ○ ○ 现在一条直线能切开了!✅
💡 核心思想:在低维分不开的数据,映射到高维往往就分得开了。
这不是巧合——维度越高,"能把点分开的方式"就越多。 极端情况下,n 个点映射到 n−1 维后总是线性可分的。
但问题来了:
| 问题 | 说明 |
|---|---|
| 映射到几维? | 为了保险可能要几千维甚至无穷维 |
| 算不动 | 高维计算量爆炸(第 5 章) |
| 存不下 | 每个样本变成一个几千维的向量 |
⭐ 二、核技巧:那个漂亮的观察
关键发现:很多算法(感知机、SVM、PCA、岭回归、K-Means…) 只用到样本之间的内积 $x_i^\top x_j$,从不需要单个样本本身。
对照
如果算法只需要 φ(xᵢ)·φ(xⱼ),
而我们能【直接算出这个内积】,不必先算出 φ(xᵢ) 和 φ(xⱼ)……
那我们就根本不需要去那个高维空间! ⭐
🔨 一个 30 秒能验证的例子
对照
取二维输入 x = (x₁, x₂),定义映射到三维:
φ(x) = (x₁², √2·x₁x₂, x₂²)
算两个点在【三维空间】里的内积:
φ(a)·φ(b) = a₁²b₁² + 2a₁a₂b₁b₂ + a₂²b₂²
= (a₁b₁)² + 2(a₁b₁)(a₂b₂) + (a₂b₂)² ← 完全平方式!
= (a₁b₁ + a₂b₂)²
= (a·b)² ⭐
↑ 只用【二维】的内积,平方一下就得到了
💡 人话:
在原空间算个内积,平方一下 —— 你就白拿到了三维空间里的内积。 从头到尾没有构造过任何三维向量。
$$K(a,b) = (a^\top b)^2 = \varphi(a)^\top\varphi(b)$$
这个函数 K 就叫「核函数」。
# 自己验证一下(10 秒)
import numpy as np
a, b = np.array([1., 2.]), np.array([3., 4.])
phi = lambda x: np.array([x[0]**2, np.sqrt(2)*x[0]*x[1], x[1]**2])
print(phi(a) @ phi(b)) # 显式映射到三维再点积
print((a @ b) ** 2) # 核技巧:二维点积后平方
# → 两个数完全相同 ✅
🎩 三、为什么这叫"魔法"
结果对照
📐 为什么 RBF 核是无穷维(想看再点)
把指数展开成泰勒级数:
$$e^{a^\top b} = \sum_{k=0}^{\infty}\frac{(a^\top b)^k}{k!}$$
每一项 $(a^\top b)^k$ 都对应一个 k 阶多项式核 —— 也就是一个有限维映射。 无穷多项加起来 = 无穷维的特征空间。
而 RBF 核 $\exp(-\gamma\|a-b\|^2) = e^{-\gamma\|a\|^2}e^{-\gamma\|b\|^2}e^{2\gamma a^\top b}$, 最后那项正是上面的形式。
🔑 核技巧的威力一句话: 你在一个自己永远无法写下来的空间里做线性分类,而计算成本只和原始维度有关。
📋 四、常用核函数
| 核 | 公式 | 特点 | 什么时候用 |
|---|---|---|---|
| 线性核 | $a^\top b$ | 就是不做映射 | 数据本身线性可分;高维稀疏(文本) |
| 多项式核 | $(a^\top b + c)^d$ | 捕捉 d 阶特征交互 | 知道存在特定阶的交互 |
| 高斯核 / RBF ⭐ | $\exp(-\gamma\|a-b\|^2)$ | 无穷维,极其灵活 | 默认首选 |
| Sigmoid 核 | $\tanh(\kappa a^\top b + c)$ | 类似两层神经网络 | 少用(不总满足 Mercer 条件) |
🎚️ RBF 核的 γ 到底在控制什么
信息关系
⭐ γ 是偏差-方差旋钮,和第 4 章 kNN 的带宽 h 是同一个东西的两种写法。
💡 一个漂亮的连接:RBF 核
exp(−γ‖a−b‖²)和第 4 章 kNN 的高斯加权完全一致。 「离得近的样本更重要」这个朴素想法,一路长成了核方法。
实用起点:gamma="scale"(sklearn 默认,按特征方差自适应),然后在 [0.001, 0.01, 0.1, 1] 附近扫。
📐 五、什么函数才能当核(Mercer 条件)
不是随便一个二元函数都能当核。必须存在某个 φ 使得 K(a,b) = φ(a)·φ(b)。
判据(Mercer 定理):K 是合法核 ⟺ 对任意样本集,核矩阵(Gram 矩阵)半正定。
$$\mathbf{K} = \begin{pmatrix} K(x_1,x_1) & \cdots & K(x_1,x_n)\\ \vdots & & \vdots \\ K(x_n,x_1) & \cdots & K(x_n,x_n)\end{pmatrix} \succeq 0$$
💡 人话:核矩阵必须是一个"合法的相似度矩阵"—— 半正定保证了不会出现「某个样本和自己的相似度是负的」这类荒谬情况。
实用规则(不用记定理)
对照
✅ 常用核(线性/多项式/RBF)都是合法的,直接用
✅ 核的【组合】仍是核,可以放心造新核:
K₁ + K₂ (和)
c·K (c > 0) (正数倍)
K₁ · K₂ (乘积)
f(x)·K·f(y) (函数缩放)
⚠️ 只有自己发明核函数时,才需要验证半正定
一个实用场景:多模态数据可以分别用不同的核再相加——
比如 K_文本 + K_图像,这仍是合法核。
⚠️ 六、代价:核矩阵是 n×n 的
算一算
核方法的计算量和【样本数 n】有关,而不是维度 d
—— 这正好和你的直觉相反!
n = 1 万 → 核矩阵 10⁸ 个数 ≈ 800 MB 还行
n = 10 万 → 10¹⁰ 个数 ≈ 80 GB 💀 存不下
n = 100 万 → 10¹² 个数 💀💀
训练复杂度:O(n²) ~ O(n³)
预测复杂度:O(n_sv × d) ← 要和每个支持向量算核
⭐ 这就是核方法在大数据时代输给深度学习的根本原因: 它的复杂度随样本数超线性增长,无法 scale。
🔗 对比基础教程第 14 章的教训: Transformer 赢在能并行、能 scale。 核方法优雅但不 scale——这在深度学习时代是致命的。 又一次印证:可扩展性胜过精巧的结构设计。
缓解手段(了解即可):Nyström 近似、随机傅里叶特征(把核近似成有限维显式特征)。
🔗 七、和站内其他章的关系
| 相关的地方 | 这里的位置 |
|---|---|
| 第 4 章 kNN 的高斯加权 | 就是 RBF 核 |
| 第 5 章维度灾难 | 核技巧是绕过它的一条路(不真去高维) |
| 第 7 章 SVM 的对偶形式 | 对偶让核技巧能用上(下一章) |
| 推荐算法的相似度矩阵 | 就是一个核矩阵(如果它半正定的话) |
| 基础教程:Transformer 赢在可扩展 | 核方法输在 O(n²) |
✅ 检查点
- 核技巧解决什么问题?它的关键前提是什么?
- 为什么
(a·b)²等于三维空间里的内积?(能推一遍吗) - RBF 核对应多少维的映射?γ 大和小分别导致什么?
- Mercer 条件的实用含义是什么?怎么造新核?
- 核方法的复杂度和什么有关?为什么这和直觉相反?
- 为什么说核方法"优雅但输了"?
👀 答案
- 解决"想用高维空间的表达力但算不动"的问题。关键前提:算法只用到样本间的内积,从不需要单个样本本身。
- 展开 φ(a)·φ(b) = a₁²b₁² + 2a₁a₂b₁b₂ + a₂²b₂²,这是完全平方式 (a₁b₁+a₂b₂)²,也就是 (a·b)²。所以原空间算内积再平方,就白拿到了高维内积。
- 无穷维(指数的泰勒展开对应无穷多个多项式核)。γ 大 → 只有极近的点相似 → 边界扭曲 → 过拟合;γ 小 → 远处也算相似 → 边界平滑 → 欠拟合。
- 核矩阵必须半正定(合法的相似度矩阵)。造新核:核的和、正数倍、乘积仍是核,所以可以
K_文本 + K_图像这样组合。 - 和样本数 n 有关(核矩阵 n×n),不是维度 d。这和直觉相反——直觉以为高维更难,但核技巧恰恰把维度问题消掉了,代价转移到了样本数上。
- 它用一个极其优雅的数学技巧绕过了维度灾难,但复杂度 O(n²~n³) 使它无法处理大数据。可扩展性胜过精巧设计。
🛑 可以停在这里
⚡ 走神救援
先记住这几件事
- 核函数直接计算映射空间的内积,不必显式展开高维特征。
- 核必须满足相应的正定性要求,不能把任意相似度都当合法核。
- 核参数控制拟合形状,而核矩阵随样本数增长;同时检查泛化与计算成本。
下一节 👉 07-SVM.md