t-SNE
参考文献:《t-SNE 入门:非线性降维与数据可视化 | DataCamp》 --- Introduction to t-SNE: Nonlinear Dimensionality Reduction and Data Visualization | DataCamp
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
# 加载数据(8x8图像的1797个手写数字)
digits = load_digits()
X = digits.data # 高维数据 (1797, 64)
y = digits.target # 真实标签 (0-9)
# T-SNE降维
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X) # 输出2D坐标 (1797, 2)
# 可视化
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='tab10', alpha=0.6)
plt.colorbar(scatter, label='Digit')
plt.title('T-SNE Visualization of MNIST Digits')
plt.show()

原理
1. 核心原理
T-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非线性降维技术,主要用于高维数据可视化。其核心是通过概率建模保留数据的局部结构特征。
关键特点
- 高维空间:使用高斯分布计算点间相似度
- 低维空间:改用t分布(自由度=1)避免”拥挤问题”
- 优化目标:最小化KL散度(Kullback-Leibler Divergence)
2. 算法步骤
步骤1:计算高维相似度
对于每个数据点xi:
pj∣i=∑k=iexp(−∣∣xi−xk∣∣2/2σi2)exp(−∣∣xi−xj∣∣2/2σi2)
对称化处理:
pij=2npj∣i+pi∣j
步骤2:低维空间建模
在低维空间使用t分布:
qij=∑k=l(1+∣∣yk−yl∣∣2)−1(1+∣∣yi−yj∣∣2)−1
步骤3:梯度下降优化
损失函数:
KL(P∣∣Q)=∑i=jpijlogqijpij