【第二章:机器学习与神经网络概述】02.降维算法理论与实践-(4)t-SNE(t-Distributed Stochastic Neighbor Embedding)算法

第二章: 机器学习与神经网络概述

第二部分:降维算法理论与实践

第四节:t-SNE算法

内容:高维数据可视化,参数调整与算法收敛性


一、什么是 t-SNE?

t-SNE 是一种非线性降维算法,特别适用于高维数据的可视化(如 2D/3D)。它通过建模样本之间的相似概率,在低维空间中保留高维邻近结构。

适用场景包括:

  • 高维嵌入空间(如图像、文本、词向量);

  • 聚类结果的可视化;

  • 深度学习模型中间层特征可视化。


二、算法原理概述
高维空间中
  • 对任意两个样本 x_i, x_j,计算其条件概率 p_{j|i},表示在高维空间中 x_jx_i 的“邻居”的概率;

  • 相似度基于高斯分布,考虑局部密度。

低维空间中
  • 映射后的点为 y_i, y_j,相似度 q_{ij} 使用学生 t 分布(自由度为 1)建模;

  • 学生 t 分布具有“重尾”性质,能更好分离密集和稀疏区域。

优化目标

最小化 KL 散度:

KL(P \| Q) = \sum_{i \ne j} p_{ij} \log \left( \frac{p_{ij}}{q_{ij}} \right)

通过梯度下降不断调整低维表示,使 q_{ij} 拟合 p_{ij}


三、核心参数
参数含义
perplexity控制“邻居数量”,一般设为 5~50,影响局部 vs 全局关系
learning_rate学习率,常设为 100~1000,太小收敛慢,太大会震荡
n_iter迭代次数,至少 1000~2000
metric距离度量(默认欧氏),也可选择曼哈顿/余弦等
random_state保证结果可重复

四、Python 实现示例
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt

# 加载手写数字数据
digits = load_digits()
X = digits.data
y = digits.target

# t-SNE 降维
tsne = TSNE(n_components=2, perplexity=30, n_iter=1000, random_state=42)
X_tsne = tsne.fit_transform(X)

# 可视化
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='tab10', s=10)
plt.legend(*scatter.legend_elements(), title="Digits", loc="best", fontsize=8)
plt.title("t-SNE 可视化手写数字数据")
plt.xlabel("t-SNE 1")
plt.ylabel("t-SNE 2")
plt.grid(True)
plt.tight_layout()
plt.show()

 


五、注意事项与限制
  • t-SNE 仅用于可视化,不适合后续建模;

  • 不保留全局结构,不同运行结果可能变化(需设定 random_state);

  • 计算复杂度高,大数据集需使用 Barnes-Hut 加速(method='barnes_hut')。


六、与其他降维方法对比
方法线性/非线性是否保留全局结构可用于建模可视化效果
PCA线性中等
LDA线性+监督
MDS可非线性中等
t-SNE非线性❌(只保留局部)极佳

七、总结
  • t-SNE 是可视化高维数据结构的强大工具;

  • 适合揭示复杂模式、类簇和局部结构;

  • 合理设置参数(尤其是 perplexityn_iter)对结果影响显著;

  • 只用于探索性分析和图形展示,不能作为特征工程手段使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值