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 是一个很好的选择!
热门推荐
全面了解ISP:互联网服务提供商在我们生活中的重要角色与选择指南
强健膝盖,迈出每一步:快速简便的膝盖强化锻炼
买房能力评估的标准是什么
想不到1.8亿年前,人类和鸭嘴兽的关系竟然是这样…
虚咳嗽的症状,是什么原因
65平米小户型装修案例:巧用设计打造高级感空间
新生儿多大开始长眉毛
别再乱点痣了!痣出现这5种情况小心恶变,赶紧自查
孕产妇用药指导原则:孕期用药八大要点
个税专项附加扣除政策:条件、标准及扣除主体详解
MBTI中的感觉与直觉:定义、应用、相互影响及相关维度
交通事故分几个级型
空腹喝咖啡的利与弊
中国贫困农村地区儿童营养不良状况显著改善,为全球提供范例
感冒打喷嚏流清水鼻涕吃什么药
中医治疗心梗的方法
梅雨季节装修到底是好是坏呢?
海蓝宝优化处理分析:揭秘低价海蓝宝背后的真相
像大海般迷人的海蓝宝石不得不知的6个常识!
胆管癌有淋巴结转移是什么意思呢
简析《哪吒之魔童闹海》 背后创意+资本的股权架构设计
侠盗猎车手5,超越游戏的犯罪帝国,深度探索其魅力与争议
一喝牛奶就肚子痛想放屁,是过敏吗?
液流电池研究报告
手持式照度计的选择和使用注意事项
雅思分数范围及2024年最准确的4项技能计算方法
青花椒烘干时影响颜色的因素
西安三日游精选攻略:行程规划与预算详解
开发微信小程序用什么硬件
迟交保险费会有哪些后果