t-SNE(t-分布随机邻居嵌入)详解
创作时间:
作者:
@小白创作中心
t-SNE(t-分布随机邻居嵌入)详解
引用
CSDN
1.
https://m.blog.csdn.net/weixin_67075116/article/details/145556576
t-SNE(t-分布随机邻居嵌入,t-Distributed Stochastic Neighbor Embedding)是一种降维与可视化技术,用于将高维数据投影到低维(通常是 2D 或 3D),以便人类可以更直观地观察数据的结构和聚类情况。
它主要用于高维数据的可视化,特别适用于数据集的探索、聚类分析,在机器学习、计算机视觉、自然语言处理(NLP)、生物信息学等领域有广泛应用。
1. t-SNE 的基本概念
t-SNE 是非线性降维算法,它的核心思想是:
- 在高维空间中,计算数据点之间的相似度(概率分布)。
- 在低维空间中,寻找新的坐标,使得数据点的相对相似性尽量与高维空间保持一致。
与PCA(主成分分析)相比: - PCA主要保留全局结构,适用于线性降维。
- t-SNE主要保留局部结构,更适合可视化高维数据中的聚类模式。
2. t-SNE 的工作原理
t-SNE 通过以下几个步骤来降维:
- 计算高维数据点之间的相似度(概率分布)
- 使用高斯分布计算数据点
和
之间的相似性: - 这个公式的核心思想是:如果
和
在高维空间中很接近,则它们的相似度
也会很高。
- 在低维空间初始化数据点
- 在2D 或 3D 空间初始化数据点
,并使用t-分布(t-Distribution)计算低维空间的相似度: - 这里使用t-分布代替高斯分布,因为t-分布的长尾性使得低维数据可以更好地分开。
- 最小化 KL 散度(Kullback-Leibler Divergence, KL 散度)
- t-SNE 的目标是让高维空间的相似性(p 分布)和低维空间的相似性(q 分布)尽可能相同。
- 通过梯度下降最小化 KL 散度:
- 这保证了低维数据能够最大程度地保留高维数据的结构。
3. t-SNE 的应用
t-SNE 主要用于高维数据可视化,帮助理解数据的分布和聚类情况。以下是几个典型的应用场景:
(1)图像数据降维
- 在计算机视觉领域,图像通常具有上千维的特征向量(如 CNN 提取的特征)。
- t-SNE 可以将这些高维特征映射到2D/3D空间,使不同类别的图像更易分辨。
- 示例:用 t-SNE 处理MNIST 数据集(手写数字分类),可以看到不同数字的分布情况。
(2)自然语言处理(NLP)
- t-SNE 可用于单词嵌入(Word Embeddings)可视化,比如:
- Word2Vec
- GloVe
- BERT 词向量
- 它可以帮助研究者理解单词之间的语义关系,如“国王”(king)和“皇后”(queen)在 t-SNE 映射后可能接近。
(3)基因表达数据分析
- 在生物信息学中,基因表达数据通常有数万维特征,难以直观分析。
- t-SNE 可用于基因分型、疾病分类、癌症细胞聚类等任务,使科学家更容易发现模式。
(4)市场和客户分析
- 在电子商务和市场分析中,t-SNE 可以帮助理解客户的行为模式,将不同类型的消费者聚类。
4. t-SNE 与其他降维方法的比较
方法 | 适用场景 | 优势 | 局限性 |
|---|---|---|---|
PCA(主成分分析) | 线性降维、特征提取 | 计算快,保留全局结构 | 只适用于线性关系,难以保留局部结构 |
t-SNE | 可视化、非线性降维 | 适用于高维数据,能捕捉局部结构 | 计算慢,不能直接用于预测新数据 |
UMAP(Uniform Manifold Approximation and Projection) | 可视化、聚类 | 计算速度比 t-SNE 快,保留全局和局部结构 | 参数敏感性较高 |
5. t-SNE 代码示例
我们可以使用scikit-learn库来实现 t-SNE,将MNIST(手写数字)数据降维并可视化。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
# 加载手写数字数据集(64 维)
digits = load_digits()
X = digits.data
y = digits.target
# 使用 t-SNE 降维到 2 维
tsne = TSNE(n_components=2, perplexity=30, learning_rate=200, random_state=42)
X_tsne = tsne.fit_transform(X)
# 画出降维后的 2D 数据
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='jet', alpha=0.7)
plt.colorbar(scatter, label='Digit Label')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.title('t-SNE Visualization of MNIST Digits')
plt.show()
结果
- 手写数字(0-9)被映射到了 2D 平面,不同类别的数字被聚类到不同的区域。
- 可以直观地看到数据的分类情况,发现某些数字可能存在重叠或误分类。
6. t-SNE 的缺点
尽管 t-SNE 适用于数据可视化,但它也有一些局限性:
- 计算成本高:t-SNE 计算量较大,特别是当数据量较多时,运行速度慢。
- 不能直接用于新数据:t-SNE 是无监督学习,每次运行可能得到不同的结果,不能像 PCA 一样用于新数据的降维。
- 参数敏感:
- perplexity(困惑度):控制局部 vs. 全局结构的权衡,通常在 5-50 之间调整。
- 学习率(learning rate):太小可能收敛慢,太大可能导致数据点塌缩。
7. 总结
- t-SNE是一种非线性降维算法,用于可视化高维数据,特别适用于数据探索和聚类分析。
- 它通过t-分布计算数据点的相似性,并优化低维嵌入,使得数据在低维空间中尽可能保持原有的邻近关系。
- t-SNE 适用于图像、NLP、基因数据分析等场景,能有效展示数据的内在结构。
- 主要缺点是计算成本较高,对参数(如 perplexity)的调整较敏感,不能直接用于新数据的降维。
什么时候用 t-SNE?
如果你的目标是可视化高维数据并理解数据的分布和聚类情况,t-SNE 是一个很好的选择!
热门推荐
自行服用六味地黄丸有风险,好药也要用得对、用得好
碧玺的鉴别方法:从颜色到电性全方位解析
侧柏叶对脱发有效果吗?医生提醒:需长期使用并配合综合治疗
鼻梁骨骨折挂什么科
智慧文旅|“酒吧+戏剧”沉浸式焕活夜间消费场景,重构传统酒吧消费逻辑
东契奇当选二月西部最佳球员 他单月场均33.4分10.3助攻9.6篮板
孩子喝醉,家长应该怎么应对?
轿车自动挡的正确使用方式是什么?怎样避免自动挡使用中的常见错误?
色盲:影响与应对方案
头晕/眩晕的诊断与鉴别诊断,一文详解
胆汁淤积综合症对胎儿有什么影响
ESI最新数据显示:湘大计算机学科首次进入ESI全球前1%
从出生时辰看性格
TOLL封装:打造高性能MOS管的关键所在
治理老年网络沉迷,不能靠任何一方“单打独斗”|新京智库
阿凡达票房有多少亿?212亿的史诗作品!
超市买的鸡蛋,不要随便塞进冰箱
荔枝季节是几月到几月成熟?国内七大优质产地详解
轻松掌握《周易》六十四卦:歌诀联想记忆法大揭秘!
大学生创业培训:提升技能,实现自我价值
告别拖延!这10款时间管理软件让你高效掌控每一天
色盲可以治疗么
为什么2024年工作日天数与法定节假日有关
人口密度过高会导致生育率下降吗?
遮天世界最强职业推荐:姚曦、姬紫月、姜太虚
电子商务专业就业岗位及工资待遇全解析
泰国入境指南:签证政策、入境要求与注意事项全解析
采用素食生活方式的 5 个环保益处
魏牌蓝山车主集体维权,保价后降价!车主感到“被背叛”
提升涂层性能:专业油漆分散剂的选择