问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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 通过以下几个步骤来降维:

  1. 计算高维数据点之间的相似度(概率分布)
  • 使用高斯分布计算数据点


    之间的相似性:
  • 这个公式的核心思想是:如果

    在高维空间中很接近,则它们的相似度
    也会很高。
  1. 在低维空间初始化数据点
  • 2D 或 3D 空间初始化数据点

    ,并使用t-分布(t-Distribution)计算低维空间的相似度:
  • 这里使用t-分布代替高斯分布,因为t-分布的长尾性使得低维数据可以更好地分开。
  1. 最小化 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 适用于数据可视化,但它也有一些局限性

  1. 计算成本高:t-SNE 计算量较大,特别是当数据量较多时,运行速度慢。
  2. 不能直接用于新数据:t-SNE 是无监督学习,每次运行可能得到不同的结果,不能像 PCA 一样用于新数据的降维
  3. 参数敏感
  • perplexity(困惑度):控制局部 vs. 全局结构的权衡,通常在 5-50 之间调整。
  • 学习率(learning rate):太小可能收敛慢,太大可能导致数据点塌缩。

7. 总结

  • t-SNE是一种非线性降维算法,用于可视化高维数据,特别适用于数据探索和聚类分析
  • 它通过t-分布计算数据点的相似性,并优化低维嵌入,使得数据在低维空间中尽可能保持原有的邻近关系。
  • t-SNE 适用于图像、NLP、基因数据分析等场景,能有效展示数据的内在结构。
  • 主要缺点是计算成本较高,对参数(如 perplexity)的调整较敏感,不能直接用于新数据的降维。

什么时候用 t-SNE?

如果你的目标是可视化高维数据并理解数据的分布和聚类情况,t-SNE 是一个很好的选择!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号