t-SNE(t-分布随机邻居嵌入)详解
创作时间:
作者:
@小白创作中心
t-SNE(t-分布随机邻居嵌入)详解
引用
CSDN
1.
https://blog.csdn.net/weixin_67075116/article/details/145556576
t-SNE(t-分布随机邻居嵌入)是一种降维与可视化技术,用于将高维数据投影到低维(通常是 2D 或 3D),以便人类可以更直观地观察数据的结构和聚类情况。
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 是一个很好的选择!
热门推荐
人脸识别新规出台:为个人信息安全戴上“防护罩”
探索超算中心,科技的心脏,创新的引擎
两位伟大帝王的较量:康熙与拿破仑
创业公司如何管理多元化和包容性
学习委员和班长的职责区别是什么?
锡的价格走势受什么影响?如何分析锡价格的变化趋势?
家常养生,山药排骨汤清汤制作指南
开源许可证全解析:类型、区别与选择指南
如何判断源码是不是开源
哲思:自我强大的最佳路径揭秘
数据结构:在计算机中存储和组织数据的方式
人工智能助力寻找抗癌药物!复旦团队突破传统筛选技术局限
外卖行业大变局:美团、京东、饿了么相继为骑手缴社保
淺談老年人失眠的原因、診斷及治療
MBTI职业测评工具:人格类型、理想型人格探讨及应用
调节多巴胺,提升记忆力的科学方法
5个文案设计方法,让你的产品情绪价值拉满!
生姜敷膝盖可缓解关节疼痛?医生表示:具有一定缓解作用,皮肤易过敏者慎用
BP融资计划书风险评估及应对措施说明
广州杭州全面放开落户,西安:10年后人口严控1560万人以内
如何通过目标与计划管理课后总结提升工作效率?
【原】肥胖悖论,像薛定谔的猫!Physiol Rep杂志综述
如何防范手机网络安全
一网打尽地形图知识
詹姆斯创NBA历史第3纪录,东契奇创队史2大神迹!湖人双神射归位
iOS应用内存泄露检测与优化实战
纹唇的好处和坏处 纹唇可以保持几年
全国首例“AI游戏外挂”案:技术革新下的法律挑战
直方图均衡化:提升图像对比度的利器
基因觉醒!街头“对诗热”成了新“潮玩”