🎯 学习目标

  • 理解t-SNE算法的基本原理
  • 掌握t-SNE的关键参数及其影响
  • 学会使用sklearn进行t-SNE可视化
  • 了解t-SNE与PCA的区别及适用场景
数据可视化概念图

什么是t-SNE

t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非线性降维技术, 特别适合将高维数据降维到2D或3D进行可视化。它通过保持数据点之间的局部相似性关系, 将高维空间中相似的点在低维空间中也放在一起。

🔬 核心原理

高维空间

计算点之间的相似度,使用高斯分布将距离转换为概率分布

pj|i = exp(-||xi - xj||²/2σ²)

低维空间

使用t分布计算低维空间中的相似度,避免拥挤问题

qij = (1 + ||yi - yj||²)⁻¹

⚙️ 关键参数

参数 说明 建议值
n_components 降维后的维度 通常设为2或3
perplexity 困惑度,控制局部/全局结构平衡 通常5-50,默认30
learning_rate 学习率 通常10-1000
n_iter 迭代次数 通常250-1000
random_state 随机种子 固定值以复现结果

💻 代码实现

from sklearn.manifold import TSNE from sklearn.datasets import load_digits import matplotlib.pyplot as plt # 加载手写数字数据集 digits = load_digits() X, y = digits.data, digits.target # 创建t-SNE模型 tsne = TSNE( n_components=2, perplexity=30, learning_rate=200, n_iter=1000, random_state=42 ) # 进行降维 X_tsne = tsne.fit_transform(X) # 可视化结果 plt.figure(figsize=(10, 8)) scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='tab10') plt.colorbar(scatter) plt.title('t-SNE可视化手写数字') plt.show()

⚖️ t-SNE vs PCA

特性 t-SNE PCA
类型 非线性降维 线性降维
计算复杂度 O(n²),较慢 O(n),较快
保持结构 局部结构 全局方差
可解释性 坐标无明确意义 主成分可解释
新数据投影 不支持 支持transform
主要用途 可视化 降维、特征提取
⚠️
注意事项

t-SNE结果中的距离和密度没有意义,只能用于观察聚类结构。不同类别之间的距离大小不能作为相似度的衡量标准。

🎛️ Perplexity参数影响

5

小值 (5-15)

关注局部结构,可能形成多个小簇

30

中等值 (30)

平衡局部与全局,最常用设置

50

大值 (50-100)

关注全局结构,簇更集中

数据可视化
图:t-SNE能有效揭示高维数据的聚类结构

📝 本节小结

  • • t-SNE是一种非线性降维技术,主要用于高维数据可视化
  • • 核心思想:保持高维空间中的相似性关系
  • • 关键参数:perplexity控制局部/全局结构平衡
  • • 相比PCA,t-SNE更能保持局部结构,但计算更慢
  • • 结果中的距离和密度不能用于定量分析