NeuromatchAcademy课程:非线性降维技术详解与应用
2025-07-10 07:19:04作者:滕妙奇
教程4:非线性降维方法
本教程将深入探讨非线性降维技术在数据可视化中的应用,重点比较主成分分析(PCA)与t-SNE两种方法在MNIST手写数字数据集上的表现差异。
教程目标
本教程预计耗时35分钟,主要目标包括:
- 使用PCA将MNIST数据降维至2D空间进行可视化
- 使用t-SNE将MNIST数据降维至2D空间进行可视化
- 比较两种方法在揭示数据结构方面的效果差异
环境设置与数据准备
首先我们需要导入必要的Python库并加载MNIST数据集:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
# 加载MNIST数据集
mnist = fetch_openml(name='mnist_784', as_frame=False, parser='auto')
X_all = mnist.data # 图像数据
labels_all = np.array([int(k) for k in mnist.target]) # 数字标签(0-9)
第一部分:PCA降维可视化
PCA是一种线性降维方法,通过找到数据方差最大的方向进行投影。我们首先使用PCA将784维的MNIST图像降至2维:
from sklearn.decomposition import PCA
# 初始化PCA模型,设置降维至2个主成分
pca_model = PCA(n_components=2)
# 仅使用前2000个样本加速计算
X = X_all[:2000]
labels = labels_all[:2000]
# 执行PCA变换
scores = pca_model.fit_transform(X)
# 可视化结果
def visualize_components(component1, component2, labels):
plt.figure(figsize=(10, 8))
plt.scatter(x=component1, y=component2, c=labels, cmap='tab10', alpha=0.6)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.colorbar(ticks=range(10), label='Digit')
plt.clim(-0.5, 9.5)
plt.title('MNIST PCA Visualization')
plt.show()
visualize_components(scores[:, 0], scores[:, 1], labels)
观察与思考
PCA可视化结果通常会显示:
- 不同数字的样本在2D空间中有一定程度的分离
- 数字0和1通常分离较好,因为它们形状差异大
- 数字5、8等形状相似的数字容易重叠
- 整体上存在大量重叠区域,说明线性降维难以完全分离不同类别
第二部分:t-SNE非线性降维
t-SNE是一种非线性降维方法,特别适合高维数据的可视化。它通过保留数据点之间的局部相似性来实现降维:
from sklearn.manifold import TSNE
# 初始化t-SNE模型
tsne_model = TSNE(n_components=2, perplexity=30, random_state=2020)
# 执行t-SNE变换
embed = tsne_model.fit_transform(X)
# 可视化结果
visualize_components(embed[:, 0], embed[:, 1], labels)
t-SNE结果特点
与PCA相比,t-SNE通常能展示:
- 不同数字形成更清晰的簇群
- 相似数字(如7和9)可能距离较近
- 保留了更多局部结构信息
- 不同簇之间的距离不一定反映实际关系
方法比较与选择建议
特性 | PCA | t-SNE |
---|---|---|
计算速度 | 快 | 慢 |
可扩展性 | 好 | 差(样本多时慢) |
线性/非线性 | 线性 | 非线性 |
保留特性 | 全局方差 | 局部结构 |
距离意义 | 可解释 | 仅相对位置 |
应用建议:
- 初步探索数据时先用PCA
- 需要精细可视化时用t-SNE
- 大数据集可先PCA降维再用t-SNE
- 参数调整很重要(特别是t-SNE的perplexity)
技术要点总结
-
PCA核心思想:
- 寻找最大方差方向
- 线性变换保持全局结构
- 适用于数据预处理和初步分析
-
t-SNE核心思想:
- 基于概率保持邻近关系
- 擅长揭示局部结构
- 适合最终可视化展示
-
实践建议:
- 可视化前标准化数据
- t-SNE多次运行结果可能不同
- 理解方法局限性和参数影响
本教程通过实际案例展示了两种降维技术的应用场景和效果差异,帮助读者掌握选择合适降维方法的判断能力。