← 返回目录

Chapter 18: 核主成分分析

Kernel Principal Component Analysis

用核技巧,将非线性数据投影到高维度空间,再投影

📖 本章概要

核主成分分析(Kernel PCA, KPCA)是主成分分析的扩展,用于处理非线性数据。 通过核技巧将数据隐式映射到高维空间,再进行PCA,从而捕捉复杂的非线性结构。

18.1 核PCA
PCA的局限性与KPCA引入
18.2 从PCA说起
两个格拉姆矩阵与SVD联系
18.3 核主成分分析
核矩阵、中心化、特征值分解

18.1 核PCA

⚠️ 主成分分析不是万能的!

PCA有个致命前提:PCA假设数据服从多元高斯分布。 对于非线性数据(如环形、球形、螺旋形),PCA在降维提取最大方差上几乎起不到任何作用。

核主成分分析(Kernel PCA)通过核技巧解决这个问题: 使用核函数将原始特征空间映射到更高维度的空间,使得数据在新空间中可以更好地被线性分离。

🎯

核主成分分析引入

Kernel PCA vs Traditional PCA

⚠️ PCA的局限性:PCA假设数据服从多元高斯分布。对于非线性数据(如环形、球形),PCA在降维和提取最大方差上几乎无效。 KPCA通过核技巧将数据映射到高维空间,再进行PCA,从而处理非线性结构。

图1:非线性环形数据

Feature 1Feature 2
内圈(类别0)
外圈(类别1)

PCA投影(无效)

第一主成分

❌ PCA失败:线性投影无法分离两个同心圆,所有点混在一起,方差解释能力极差。

❌ PCA的问题
  • • 假设:数据服从线性结构
  • • 方法:在原始空间找最大方差方向
  • • 局限:无法处理非线性关系
  • • 结果:环形数据投影后完全混叠
✅ KPCA的优势
  • • 核技巧:φ(x) 映射到高维空间
  • • 方法:在核空间进行PCA
  • • 灵活:多项式核、高斯核、Sigmoid核
  • • 结果:非线性数据在核空间线性可分

💡 核心思想:KPCA不直接在原始空间计算,而是通过核函数K(xᵢ, xⱼ)隐式地在高维空间完成内积运算。 这样既避免了显式映射φ(x)的高计算成本,又能处理复杂的非线性结构。

核PCA的步骤

  1. 选择核函数:根据数据的性质选择适当的核函数(多项式核、高斯核、Sigmoid核)
  2. 构建核矩阵:计算每对样本之间的核函数值,形成核矩阵K(xⁱ, xʲ)
  3. 中心化核矩阵:对核矩阵进行中心化处理,确保数据的行列均值同时为零
  4. 计算特征值和特征向量:对中心化后的核矩阵进行特征值分解
  5. 选择主成分:选择前p个最大特征值对应的特征向量,构成新的特征矩阵

18.2 从PCA说起

🔄 回顾:两个格拉姆矩阵

对于数据矩阵X (n×D),存在两个格拉姆矩阵:

第一个格拉姆矩阵 XᵀX (D×D)
• 公式(1): XᵀX = VΛVᵀ
• V: 主成分载荷(D×D)
• Λ: 特征值对角矩阵
• 因子得分: Z = XV
第二个格拉姆矩阵 XXᵀ (n×n)
• 公式(5): XXᵀ = UΛUᵀ
• U: 左奇异向量(n×n)
• Λ: 相同的非零特征值
• XXᵀ是线性核矩阵!
🔄

从PCA说起

两个格拉姆矩阵与奇异值分解

📐 关键回顾:矩阵X有两个格拉姆矩阵:XᵀX (D×D) 和 XXᵀ (n×n)。 两者特征值分解的结果通过SVD联系起来。KPCA的核心思路来自于第二个格拉姆矩阵XXᵀ!

图2:第一个格拉姆矩阵 XᵀX 特征值分解

Xn × D→XᵀD × n@Xn × D=XᵀXD × D特征值分解VΛVᵀ载荷矩阵V
公式(1):XᵀX = VΛVᵀ
• V: 主成分载荷,每列vⱼ为主成分方向
• Λ: 对角矩阵,对角元素λⱼ为特征值
• 因子得分:Z = XV

🔑 关键洞察:XXᵀ的每个元素是样本间的内积x⁽ⁱ⁾·x⁽ʲ⁾,本质上是一个线性核矩阵。 KPCA的核心思路是:将XXᵀ替换为核函数矩阵K(xⁱ, xʲ), 从而在高维空间隐式计算内积,处理非线性结构!

18.3 核主成分分析

🧮 高斯核为例

本节以高斯核(RBF核)为例介绍KPCA的完整计算流程: 从原始数据X → 欧氏距离 → 距离平方 → 高斯核矩阵K → 核中心化Kc → 特征值分解 → 因子得分。

欧氏距离→距离平方→高斯核(图5-7)

💡 动画说明:以下动画逐步展示从散点图计算欧氏距离,到平方得距离²矩阵,最后应用高斯核函数的完整过程。 每一步都是逐元素计算,揭示矩阵构建的因果关系。

🔄

距离→核矩阵计算过程

图5-7:逐步动画演示

进度: 1 / 16
步骤1:计算欧氏距离
当前计算: 点 0 → 点 0

图5:散点图与欧氏距离

x0x1x2x3

矩阵热图(4×4)

0.0000112233

🎯 过程揭示:(1) 从散点图计算所有点对的欧氏距离; (2) 平方得到距离²矩阵(避免开方运算); (3) 应用高斯核κ(xⁱ,xʲ)=exp(-γ·||xⁱ-xʲ||²),将距离转换为相似度。 γ越大,核函数衰减越快,只有非常近的点才相似。

核矩阵中心化(图8)

💡 动画说明:核矩阵中心化分为两步:①列中心化MK,②行中心化(MK)Mᵀ。 动画展示矩阵相乘的逐步过程,而不是直接展示结果。

🎛️

核矩阵中心化过程

图8:MKMᵀ逐步动画

步骤: 1 / 4
原始核矩阵K
①列中心化 MK
②行中心化 (MK)Mᵀ
③完成 Kc
原始核矩阵 K
高斯核函数计算得到的对称矩阵,但行列均值不为0,需要中心化才能进行PCA。

矩阵运算可视化

Kn × n原始核矩阵

原始核矩阵 K

1.000.610.140.010.611.000.610.140.140.611.000.610.010.140.611.0000112233

🔄 中心化的必要性:PCA要求数据中心化(均值为0)。在核空间中,我们无法直接访问φ(x), 只能通过核矩阵K间接操作。使用中心化矩阵M = I - (1/n)·11ᵀ, 通过Kc = MKMᵀ实现行列同时去均值,等价于在核空间中对数据中心化。

特征值分解(图9)

💡 动画说明:特征值分解的关键步骤:计算→排序→选择。 动画重点展示为什么要降序排列特征值,以及如何选择前p个主成分的决策过程。

🔬

特征值分解过程

图9:Kc → WDWᵀ 逐步动画

步骤: 1 / 6
中心化核矩阵 Kc
准备对中心化核矩阵Kc进行特征值分解

特征值分解流程

Kcn × n

特征值贡献度

100%50%0%累计方差解释率主成分编号
对角矩阵 D
等待排序完成...
特征向量矩阵 W
等待特征值排序...
选择主成分
等待分解完成...

🔬 关键洞察:(1) 使用numpy.linalg.eigh()对对称矩阵Kc进行特征值分解; (2) 特征值降序排列,越大的特征值对应越重要的主成分; (3) 特征向量W直接作为KPCA的因子得分,无需像普通PCA那样计算XV; (4) 选择前p个主成分,通常累计方差解释率达到80-90%即可。

非线性网格变形(图10)

💡 动画说明:核映射的升维效果可视化:规则网格在核空间中发生非线性扭曲。 动画展示从原始空间到核空间的连续变形过程,而不是前后对比静态图。

🌀

非线性网格变形

图10:核映射的升维效果

进度: 0%
原始特征空间:规则网格
高斯核κ(x,x')=exp(-γ·||x-x'||²)将平面网格映射到高维空间, 近距离点被"拉开",远距离点被"压缩"
γ小:变形温和γ大:变形剧烈

原始特征空间(2D)

原始特征1原始特征2规则网格(线性空间)

核空间(高维映射)

核心区域(高相似度)核主成分1核主成分2非线性变形(核空间)
📐
原始空间
• 2维线性空间
• 规则网格
• 欧氏距离度量
• 无法分离非线性数据
🌀
核映射
• φ: ℝ² → ℝ∞(隐式)
• 高斯核函数
• 近点拉开,远点压缩
• γ控制变形强度
✨
核空间
• 无穷维特征空间
• 非线性变形网格
• 局部结构放大
• 可分离复杂模式

🌀 升维的本质:高斯核κ(x,x')=exp(-γ·||x-x'||²)隐式地将数据映射到无穷维空间。 网格变形展示了这种非线性映射:中心区域被"拉伸"(高相似度区域被放大), 外围区域被"压缩"(低相似度区域被缩小)。 这种变形使得原本线性不可分的环形、月牙形数据在核空间中变得可分。 γ越大,变形越剧烈,但可能导致过拟合。

核技巧的威力

核技巧的主要优势在于它避免了直接在高维空间中进行计算, 而是通过核函数在低维空间中的计算得到高维空间中的内积。

  • 节省计算成本:无需显式计算映射φ(x),只需计算核函数K(xⁱ, xʲ)
  • 避免维度灾难:高斯核对应无限维映射,但核矩阵仍是n×n
  • 灵活性:不同核函数对应不同的特征空间和非线性变换

交互式KPCA探索

🎨 参数影响探索(图11-13)

通过交互式组件,直观感受高斯核参数γ对KPCA结果的影响。 观察原始空间的网格如何在核空间中发生非线性变形, 以及不同数据模式(环形、月牙)在KPCA下的分离效果。

图11:sklearn.decomposition.KernelPCA()生成的环形数据KPCA结果
图12-13:Gamma参数对核主成分分析结果影响(环形与球形数据)

🎨

交互式KPCA探索

图10-13:非线性映射与参数影响

数据模式
Gamma (γ): 1.00核函数带宽
0.1 (宽核)5.0 (窄核)
主成分数: 2降维目标
1维6维
参数说明
Gamma (γ):
• γ越大:核函数越窄,只有非常近的点才相似
• γ越小:核函数越宽,较远的点也有相似度
• 影响特征空间的"弯曲程度"
主成分数:
• 类似PCA中选择保留的维度
• 越多:保留更多信息,但可能过拟合
• 越少:降维效果好,但可能损失信息

原始特征空间

Feature 1Feature 2
类别0
类别1

核空间投影 (PC1 vs PC2)

PC1PC2
两类清晰分离!
PC1
✓ 保留
~17%
PC2
✓ 保留
~14%
PC3
✗ 舍弃
~11%
PC4
✗ 舍弃
~8%
PC5
✗ 舍弃
~5%
PC6
✗ 舍弃
~2%

图10:非线性映射网格变化

通过核函数达到的"升维"效果:虽然原始特征只有2个,但经过非线性变换, 数据被映射到高维空间,网格发生扭曲变形,使得原本线性不可分的数据在新空间中线性可分。

γ过小
核函数太宽,所有点都很相似,失去区分能力,网格变形不明显
γ适中 ✓
恰当的核宽度,能够捕捉数据的非线性结构,网格适度扭曲
γ过大
核函数太窄,只有极近的点相似,可能过拟合,网格剧烈扭曲

🎯 交互探索建议:(1) 调节γ观察网格变形和分离效果的变化; (2) 切换数据模式对比KPCA在不同非线性结构上的表现; (3) 调整主成分数量,理解降维与信息保留的权衡。 环形数据在核空间中被"拉直",月牙数据被"展开",这就是核技巧的威力!

升维过程的理解

图10展示的就是非线性投影产生的网格变化。 虽然原始特征只有两个,但是经过非线性变换我们可以得到各种奇形怪状的非线性投影网格。 这个过程就是通过核函数达到的"升维"的效果。

环形数据在核空间中被"拉直",使得内外圈在第一主成分上清晰分离。 这正是KPCA处理非线性数据的核心能力!

实践与应用

📦 Scikit-learn实现

# 导入库
from sklearn.decomposition import KernelPCA
from sklearn.datasets import make_circles
# 创建KPCA对象
kpca = KernelPCA(n_components=2,
kernel='rbf',
gamma=1)
# 拟合转换
X_kpca = kpca.fit_transform(X)

参数说明:
• n_components: 保留的主成分数量
• kernel: 核函数类型('rbf', 'poly', 'sigmoid'等)
• gamma: RBF核的参数,控制核函数宽度

🎯 应用场景

✓
非线性降维:
处理环形、球形、螺旋等非线性可分数据
✓
特征提取:
从复杂数据中提取非线性特征
✓
预处理步骤:
作为分类/聚类前的数据预处理
✓
可视化:
将高维非线性数据投影到2D/3D空间

⚙️ 参数选择建议

核函数选择
• 高斯核(RBF): 通用,适合大多数情况
• 多项式核: 适合多项式可分数据
• Sigmoid核: 类似神经网络激活函数
γ参数调优
• 网格搜索:尝试[0.001, 0.01, 0.1, 1, 10]
• 交叉验证:根据下游任务性能选择
• 数据规模:大数据集用较小γ
主成分数
• 累计方差解释率≥85%
• 或通过交叉验证确定
• 平衡降维效果与信息保留

📚 本章总结

核心概念

  • ✓ PCA假设线性结构,无法处理非线性数据
  • ✓ KPCA通过核技巧隐式映射到高维空间
  • ✓ 核矩阵替代格拉姆矩阵XXᵀ
  • ✓ 核中心化确保数据去均值
  • ✓ 特征向量直接作为因子得分

关键公式

K(xⁱ, xʲ) = exp(-γ·||xⁱ-xʲ||²)
M = I - (1/n)·11ᵀ
Kc = MKMᵀ
Kc = WDWᵀ
因子得分 = W[:, :p]

延伸阅读:有关核主成分分析背后的数学原理,请参考:arxiv.org/pdf/1207.3538.pdf