t-SNE数据降维可视化

article/2025/9/29 11:30:20

t-SNE数据降维可视化 – 潘登同学的Machine Learning笔记

文章目录

    • t-SNE数据降维可视化 -- 潘登同学的Machine Learning笔记
  • t-SNE的基本思想
    • SNE(Stochastic Neighbor Embedding)
    • SNE的主要缺点
      • 距离不对称
      • 存在拥挤现象
    • 如何确定 σ \sigma σ
    • 总结t-sne
    • 代码实现
  • 对比t-sne与UMAP

是最近遇到了bertopic中,使用的UMAP降维ie方法,说是能吊打t-SNE,但之前我做Word2Vec的时候也是用的t-SNE,所以学习一下,并且做一下两者的对比

t-SNE的基本思想

t-SNE是一种非常常用的数据降维(数据可视化),基本思想是

  1. 在高维空间构建一个概率分布拟合高维样本点间的相对位置
  2. 在低维空间,也构建一个概率分布拟合高维样本点之间的位置关系
  3. 通过学习,调整低维数据点,令两个分布接近

SNE(Stochastic Neighbor Embedding)

SNE直译过来是随机邻域嵌入;

为了衡量高维数据的相似性,用条件概率表示高维样本点间的位置关系:
p j ∣ i = e − ∣ ∣ x i − x j ∣ ∣ 2 2 σ i 2 ∑ k ≠ i e − ∣ ∣ x i − x k ∣ ∣ 2 2 σ i 2 p_{j|i} = \frac{e^{-\frac{||x_i-x_j||^2}{2\sigma_i^2}}}{\sum_{k\neq i} e^{-\frac{||x_i-x_k||^2}{2\sigma_i^2}}} pji=k=ie2σi2xixk2e2σi2xixj2
当然地,当点 i i i与点 j j j的距离越近, p j ∣ i p_{j|i} pji就越大;

我们要考虑映射后的低维空间的数据分布,同样可以用条件概率来表示:
q j ∣ i = e − ∣ ∣ y i − y j ∣ ∣ 2 ∑ k ≠ i e − ∣ ∣ y i − y k ∣ ∣ 2 q_{j|i} = \frac{e^{-||y_i-y_j||^2}}{\sum_{k\neq i} e^{-||y_i-y_k||^2}} qji=k=ieyiyk2eyiyj2

为了让两个分布更相近,采用KL散度对其进行衡量
C = ∑ i K L ( P i ∣ ∣ Q i ) = ∑ i ∑ j p j ∣ i log ⁡ p j ∣ i q j ∣ i C = \sum_i KL(P_i||Q_i) = \sum_i\sum_jp_{j|i}\log{\frac{p_{j|i}}{q_{j|i}}} C=iKL(PiQi)=ijpjilogqjipji
调整 y y y最小化C,实现降维

SNE的主要缺点

距离不对称

根据上面的公式会得到 p j ∣ i ≠ p i ∣ j p_{j|i} \neq p_{i|j} pji=pij,改进方法
p i j = e − ∣ ∣ x i − x j ∣ ∣ 2 2 σ i 2 ∑ k ≠ l e − ∣ ∣ x l − x k ∣ ∣ 2 2 σ i 2 q i j = e − ∣ ∣ y i − y j ∣ ∣ 2 ∑ k ≠ l e − ∣ ∣ y l − y k ∣ ∣ 2 p_{ij} = \frac{e^{-\frac{||x_i-x_j||^2}{2\sigma_i^2}}}{\sum_{k\neq l} e^{-\frac{||x_l-x_k||^2}{2\sigma_i^2}}} \\ q_{ij} = \frac{e^{-||y_i-y_j||^2}}{\sum_{k\neq l} e^{-||y_l-y_k||^2}} pij=k=le2σi2xlxk2e2σi2xixj2qij=k=leylyk2eyiyj2
简单来说就是把分母变成所有点两两距离之和;

但是会有更好的方法保证对称:
p i j = p i ∣ j + p j ∣ i (保证对称) p i j = p i j ∑ i ∑ j p i j (保证归一化) p_{ij} = p_{i|j} + p_{j|i} \text{(保证对称)}\\ p_{ij} = \frac{p_{ij}}{\sum_i\sum_jp_{ij}} \text{(保证归一化)}\\ pij=pij+pji(保证对称)pij=ijpijpij(保证归一化)

存在拥挤现象

从高维到低维进行转换的过程中,低维点的距离无法建模高维点之间的位置关系,有可能高维空间中距离较大的点,在低维空间距离会变得较小;

换言之,哪怕高维空间中离得较远的点,在低维空间中留不出这么多空间来映射。于是到最后高维空间中的点,尤其是远距离和中等距离的点,在低维空间中统统被塞在了一起,这就叫做“拥挤问题(Crowding Problem)

高维空间保持高斯分布不变,将低维空间的分布做调整,使得两边尾巴比高维空间的高斯分布更高,即可缓解拥挤问题;

q i j = ( 1 + ∣ ∣ y i − y j ∣ ∣ 2 ) − 1 ∑ k ≠ l ( 1 + ∣ ∣ y k − y l ∣ ∣ 2 ) − 1 q_{ij} = \frac{(1+||y_i-y_j||^2)^{-1}}{\sum_{k\neq l}(1+||y_k-y_l||^2)^{-1}} qij=k=l(1+ykyl2)1(1+yiyj2)1
在这里插入图片描述

假设我们的低维数据分布对高维数据分布已经拟合完毕,则可以认为对于高维数据点 x i 、 x j x_i、x_j xixj和低维映射点 y i 、 y j y_i、y_j yiyj,有 p i j = q i j p_{ij}=q_{ij} pij=qij。我们用图中两条红线表示两种情况:

  1. 上面的红线表示:当两个点相距相对近的时候,低维空间中比高维空间中相对更近。
  2. 下面的红线表示:当两个点相距相对远的时候,低维空间中比高维空间中相对更远。

如何确定 σ \sigma σ

设置一个固定的参数: Perplexity表示分布的熵,设法调节每个 σ i \sigma_i σi,使得
log ⁡ ( P e r ) = − ∑ j p j ∣ i log ⁡ ( p j ∣ i ) \log(Per) = -\sum_j p_{j|i}\log(p_{j|i}) log(Per)=jpjilog(pji)
根据 p j ∣ i p_{j|i} pji的计算公式,距离 x i x_i xi小于 2 σ 2\sigma 2σ的点对p的计算起主要作用,故

  • x i x_i xi临近点较多的时候: 减少 σ \sigma σ
  • x i x_i xi临近点较多=少的时候: 增大 σ \sigma σ

总结t-sne

  1. 计算 p j ∣ i p_{j|i} pji,利用结果,计算 p i j p_{ij} pij
    p j ∣ i = e − ∣ ∣ x i − x j ∣ ∣ 2 2 σ i 2 ∑ k ≠ i e − ∣ ∣ x i − x k ∣ ∣ 2 2 σ i 2 p_{j|i} = \frac{e^{-\frac{||x_i-x_j||^2}{2\sigma_i^2}}}{\sum_{k\neq i} e^{-\frac{||x_i-x_k||^2}{2\sigma_i^2}}} pji=k=ie2σi2xixk2e2σi2xixj2
    p i j = p i ∣ j + p j ∣ i , p i j = p i j ∑ i ∑ j p i j p_{ij} = p_{i|j} + p_{j|i}, p_{ij} = \frac{p_{ij}}{\sum_i\sum_j p_{ij}} pij=pij+pji,pij=ijpijpij
  2. 随机生成低维随机数并计算:
    q i j = ( 1 + ∣ ∣ y i − y j ∣ ∣ 2 ) − 1 ∑ k ≠ l ( 1 + ∣ ∣ y k − y l ∣ ∣ 2 ) − 1 q_{ij} = \frac{(1+||y_i-y_j||^2)^{-1}}{\sum_{k\neq l}(1+||y_k-y_l||^2)^{-1}} qij=k=l(1+ykyl2)1(1+yiyj2)1
  3. 利用梯度下降法令C最小
    C = K L ( P ∣ ∣ Q ) = ∑ i ∑ j p i j log ⁡ p i j q i j C = KL(P||Q) = \sum_i\sum_jp_{ij}\log{p_{ij}{q_{ij}}} C=KL(PQ)=ijpijlogpijqij

代码实现

对mnist手写数据集做t-sne数据降维
在这里插入图片描述

初始化结果
在这里插入图片描述

第100次迭代
在这里插入图片描述

算法收敛
在这里插入图片描述

对比t-sne与UMAP

t-sne有以下缺点

  • tSNE实际上只能嵌入到2维或3维中,即只能用于可视化的目的,所以很难将tSNE作为一般的降维技术;
  • tSNE不能直接处理高维数据,通常使用Autoencoder或PCA进行降维处理,然后将降维的结果输入tsne做可视化。

t-sne与UMAP的对比

  • UMAP是一种新颖且有趣的降维技术,与纯机器学习半经验算法tSNE截然不同,它基于可靠的数学原理。
  • UMAP使用高维度上的指数概率分布,但不一定要像tSNE那样使用欧几里得距离,而是可以插入任何距离。
  • UMAP在计算 p j ∣ i p_{j|i} pji的时候只考虑K个近邻点的距离,而且无需归一化,极大减少计算量; 除此之外 , 在计算距离的时候减去了一个 ρ i \rho_i ρi,确保了流型的连通性;
  • UMAP在低维的概率表示也是使用欧式距离,但是不再使用t分布,转而使用一个曲线拟合的方式(但是与t分布比较相似),再次提到,这里也不用归一化;
  • UMAP的Loss函数采用的是交叉熵,无论高维数据距离很大还是很小,都很容易调整低维数据(因为Loss函数的梯度在极端处很大(UMAP处说到过))
  • 与tSNE使用的随机法线初始化相反,UMAP使用Graph Laplacian分配初始低维坐标。(但是对结果影响不大,可能能减少计算量)

http://chatgpt.dhexx.cn/article/02LNrJtq.shtml

相关文章

【机器学习】基于t-SNE数据可视化工程

一、说明 t-SNE (t-Distributed Stochastic Neighbor Embedding)是一种常用的非线性降维技术。它可以将高维数据映射到一个低维空间(通常是2D或3D)来便于可视化。Scikit-learn API提供TSNE类,以使用T-SNE方法可视化数据。在本教程中,我们将简要学习如何在 Python 中使用 TS…

t-SNE:如何理解与高效使用

摘要 尽管t-SNE对于可视化高维数据非常有用,但有时其结果可能无法解读或具有误导性。通过探索它在简单情况下的表现,我们可以学会更有效地使用它。 探索高维数据的一种流行方法是t-SNE,由 van der Maaten 和 Hinton[1] 在 2008 年提出。该技术…

How to Use t-SNE Effectively.(翻译:如何高效地使用t-SNE)

Translation: How to use t-SNE effectively 1. 这些超参数真的很重要2. 在t-SNE图中,簇大小没有任何意义3. 集群之间的距离可能没有任何意义4. 随机噪声并不总是随机的。5. 有时你会看到一些形状6. 对于拓扑,你可能需要多个绘图7. 结论 尽管t-SNE在可视…

t-SNE原理与推导

t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出。t-SNE 作为一种非线性降维算法,常用于流形学习(manifold learning)的降维过程中并与LLE进行类比&#xff0…

t-SNE降维

t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出来。此外,t-SNE 是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可…

t-SNE 可视化

背景 t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非常流行的非线性降维技术,主要用来对高维数据进行可视化,了解和验证数据或者模型。t-SNE属于流行学习(manifold learning),假…

用于语义分割模型的t-SNE可视化

前言 在之前的博客t-SNE可视化-Python实现中,对t-SNE的原理进行了一个简单的介绍,也给出了一个简单的使用案例。这篇博客在之前的基础上实现在语义分割模型上的t-SNE可视化。 语义分割模型中使用t-SNE的目的是,从模型的特征层面进行一定的可…

T SNE降维matlab程序,关于t-SNE降维方法

关于t-SNE降维方法 论文原图是这样的: image.png 1. 什么是t-SNE: 全名是t-distributed Stochastic Neighbor Embedding(t-SNE),翻译过来应该可以叫学生t分布的随机邻点嵌入法。 t-SNE将数据点之间的相似度转换为概率。原始空间中的相似度由高斯联合概率表示,嵌入空间的相似…

t-SNE可视化-Python实现

t-SNE 本文主要是对An Introduction to t-SNE with Python Example博客的翻译记录,和一些入门的Python代码,可以的话推荐阅读原文。 主要参考 介绍: An Introduction to t-SNE with Python Example GitHub: sas-python-work/tS…

t-SNE完整笔记

t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出来。此外,t-SNE 是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可…

机器学习笔记:t-SNE

0 前言 t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非常常用的数据降维,常用于数据可视化t-SNE/SNE的基本原理是: 在高维空间构建一个概率分布拟合高维样本点间的相对位置关系 在低维空间,也构建 一个…

图像异常检测

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达在机器学习中,处理异常检测任务是很常见的。数据科学家经常遇到必须显示,解释和预测异常的问题。在这篇文章中,我们主要讲述&#xff…

python进行图像边缘检测

边缘检测 图像边缘是指图像中表达物体的周围像素灰度发生阶跃变化的那些像素集合。 图像中两个灰度不同的相邻区域的交界处,必然存在灰度的快速过渡或称为跳变,它们与图像中各区域边缘的位置相对应,边缘蕴含了丰富的内在信息,如方…

用CNN识别CT图像检测肺癌

用CNN识别CT图像检测肺癌 原文:2nd place solution for the 2017 national datascience bowl 翻译参考:知乎用户王小新 Kaggle百万美元大赛优胜者:用CNN识别CT图像检测肺癌 概要 本文为2017年由Kaggle举办的数据科学竞赛的第二名获奖者Juli…

机场航拍图像检测软件(Python+YOLOv5深度学习模型+清新界面)

摘要:机场航拍图像检测软件使用深度学习技术检测机场航拍图像中的飞机目标等,识别航拍目标等结果并记录和保存,辅助机场智能管理运行。在介绍算法原理的同时,给出Python的实现代码、训练数据集,以及PyQt的UI界面。机场…

半监督学习+3D医疗图像检测 FocalMix

目录 Abstract 1.Contributions Introduction 2. Background and Preliminaries背景和准备工作 2.1.1 Anchor boxes 2.1.2 Focal Loss 2.2. Semi-supervised Learning 3. Methodology 3.1. Soft-target Focal Loss 3.2. Anchor-level Target Prediction 3.3. MixUp A…

检测 图像中得直线

Radon 变换 介绍 图像投影,就是说将图像在某一方向上做线性积分(或理解为累加求和)。如果将图像看成二维函数f(x, y),则其投影就是在特定方向上的线性积分,比如f(x, y)在垂直方向上的线性积分就是其在x轴上的投影&…

遥感图像目标检测研究综述

遥感图像目标检测 遥感图像特殊性一、目标检测研究综述1.介绍2.传统目标检测3.基于深度学习目标检测R-CNN系列为代表的两阶段算法YOLO、SSD为代表的一阶段算法 二、多尺度目标检测研究综述1.基于图像金字塔的多尺度目标检测基于尺度生成网络的图像金字塔基于尺度归一化的图像金…

工业自动化流水线上的机器视觉检测应用 (二):图像检测

图像检测是用机器代替人眼来做测量和判断,使用工业相机等机器视觉产品将被检测的目标转换成图像信号,传送给专用的图像处理系统,根据像素分布和亮度、颜色等信息,转变成数字化信号,图像处理系统等通过分析这些信号进行…

基于卷积神经网络的多目标图像检测研究(一)

摘 要 目标检测任务简单来说是在图片或视频中指出多个特定目标并以方框形式给出这些物体在图片中的位置和大小。它与我们的生活密切相关,它被广泛应用于安全识别、无人驾驶、医疗诊断、图像检索等领域,并且未来将愈发重要。因此目标检测也是近年来机器学…