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 是一个很好的选择!
热门推荐
气胸患者日常生活注意事项
调芝麻酱,直接加水就废了!多加这一步,香浓细腻无疙瘩
机箱风扇如何安装利于散热?机箱风扇安装方法 安装方向图解教程
甘露之变:一场改变了唐朝命运的宫廷斗争
知名脱口秀演员自曝曾患抽动症,超过20%的自闭症也受其困扰
怎么判断汽车是否“烧机油”?老司机:出现这几种现象就是烧机油
国服绝地求生全解析:开启120帧体验极限速度
为什么同样的字体,在 PDF 里更好看
银河系的恒星是如何分类的?揭秘从红矮星到蓝巨星的演化过程
如何诊断膝关节骨性关节炎及分阶段治疗
尤太忠:从贫苦农民到革命将领,为家乡发展倾尽全力
中国古建筑:亭、台、楼、阁、轩、榭、廊、坊,你分得清吗?
如何让管理层认可法务工作价值?
司令员在军队中的重要性与职责:级别、选拔及挑战解析
「臀推」跟「橋式」有什麼不同?告訴你臀推的好處、注意事項和變化式
“配享太庙”?扒一扒古代的荣誉天花板
有机牛奶与普通牛奶:生产、营养与安全的全面对比
如何认识各类门的材质与风格特点?这种材质和风格如何影响家居装饰?
中国科研团队揭示晶界网络动态重构新机制
张海迪:轮椅上的坚强斗士
2024年排名前10位的女性动漫角色
“A+H”上市热潮再起!“国际化战略”为赴港核心
鹅蛋人工孵化全攻略:从种蛋挑选到小鹅护理
如何进行软件公司的薪酬体系分析?
如何使用SolidWorks API:从入门到精通
“主动营养 主动健康”:一文读懂平衡膳食八准则
核桃分心木:功效与食用方法全解析
沧浪文化探源:汉水流域的千年文明传奇
单店盈利模型怎么做(单店盈利模型的构建与优化)
真正相伴到老的夫妻,都很会讲“废话”