t-SNE算法

article/2025/9/29 10:25:37

t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 和 Geoffrey Hinton在 08 年提出来。t-SNE 是一种非线性降维算法,非常适用于高维数据降维到 2 维或者 3 维,进行可视化。在实际应用中,t-SNE很少用于降维,主要用于可视化,可能的原因有以下几方面:

  • 当我们发现数据需要降维时,一般是特征间存在高度的线性相关性,此时我们一般使用线性降维算法,比如PCA。即使是特征之间存在非线性相关,也不会先使用非线性降维算法降维之后再搭配一个线性的模型,而是直接使用非线性模型;
  • 一般 t-SNE 都将数据降到 2 维或者 3 维进行可视化,但是数据降维降的维度一般会大一些,比如需要降到 20 维,t-SNE 算法使用自由度为 1 的 t 分布很难做到好的效果,而关于如何选择自由度的问题,目前没有研究;
  • t-SNE 算法的计算复杂度很高,另外它的目标函数非凸,可能会得到局部最优解;

在可视化的应用中,t-SNE的效果要好于 PCA,下面是对手写数字可视化的一个结果对比,上面的图是 PCA 降维到2维的结果,下面是 t-SNE算法的结果。对可视化的效果衡量,无非是两方面:相似的数据是不是离得近,不相似的数据是不是离得远。从这两方面来讲,t-SNE的效果要明显优于 PCA。

一、SNE

1、基本思想

t-SNE算法由 SNE 改进而来,所以先来介绍 SNE。给定 n 个高维数据 x1,x2,...,xn x 1 , x 2 , . . . , x n ,若将其降维至 2 维,SNE 的基本思想是若两个数据在高维空间中是相似的,那么降维至 2 维空间时它们应该离得很近

2、相似性计算

SNE使用条件概率来描述两个数据之间的相似性,假设 xi,xj x i , x j 是高维空间中的两个点,那么以点 xi x i 为中心构建方差为 σi σ i 的高斯分布,使用 pj|i p j | i 表示 xj x j xi x i 邻域的概率,如果 xj x j xi x i 很近,那么 pj|i p j | i 很大,反之, pj|i p j | i 很小, pj|i p j | i 定义如下:

我们只关心不同点对之间的相似度,所以设定 pi|i=0 p i | i = 0

那么在低维空间中也可以使用这样的条件概率来定义距离,假设 xi,xj x i , x j 映射到低维空间后对应 yi,yj y i , y j yj y j yi y i 邻域的条件概率为 qj|i q j | i

低维空间中的方差直接设置为 σi=2/1 σ i = 2 / 1 ,方便计算,同样 qi|i=0 q i | i = 0

3、目标函数

在高维空间中,如果考虑 xi x i 与其他所有点之间的条件概率,那么会构成一个条件概率分布 Pi P i ,同样在地位空间也会有与之对应的条件概率分布 Qi Q i ,如果降维之后的数据分布与原始高维空间中的数据分布是一样的,那么理论上这两个条件概率分布式是一致的。那么如何衡量两个条件概率分布之间的差异呢?答案是使用 K-L 散度(也叫做相对熵),于是,目标函数为:

分析:

  • pj|i p j | i = 0.9,也就是 xj x j xi x i 很近时,如果算法计算映射到低维空间的 pj|i p j | i = 0.1,也就是映射后 xj x j xi x i 很远,那么此时目标函数会有一个很大的损失。SNE算法也因此保证了数据的局部性;
  • pj|i p j | i = 0.1,也就是 xj x j xi x i 很远时,如果算法计算映射到低维空间的 pj|i p j | i = 0.9,也就是映射后 xj x j xi x i 很近,那么此时目标函数会有一个很小的损失,实际上我们并不希望得到这样的结果,一个大的损失才是我们想要的,但由于 K- L 散度本身的不对称性,这一缺陷无法避免,后续我们看 t-SNE 算法如何对其进行改进。

4、SNE缺点

通过以上的介绍,总结一下SNE的缺点:

  • 不对称导致梯度计算复杂,对目标函数计算梯度如下,由于条件概率 pj|i p j | i 不等于 pi|j p i | j qj|i q j | i 不等于 qi|j q i | j ,因此梯度计算中需要的计算量较大。

  • 拥挤问题。所谓拥挤问题,顾名思义,就是不同类别的簇挤在一起,无法区分开来,这就是拥挤问题。有的同学说,是不是因为SNE更关注局部结构,而忽略了全局结构造成的?实际上,拥挤问题的出现与某个特定算法无关,而是由于高维空间距离分布和低维空间距离分布的差异造成的。

这里写图片描述

假设一个以数据点 xi x i 为中心,半径为 r 的 m 维球(二维空间就是圆,三维空间就是球),其体积是按 r 的 m 次方增长的,假设数据点是在 m 维球中均匀分布的,我们来看看其他数据点与 xi x i 的距离随维度增大而产生的变化。从图中可以看到,随着维度的增大,大部分数据点都聚集在 m 维球的表面附近,与点 xi x i 的距离分布极不均衡。如果直接将这种距离关系保留到低维,肯定会出现拥挤问题。

  • 由于K - L散度本身的不对称性,使得SNE算法只关注数据局部性而忽略了数据的全局性。

针对以上 3 个缺点,在 t-SNE 中会如何改进呢?

二、t-SNE

1、对称SNE

原始 SNE 中,在高维空间中条件概率 pj|i p j | i 不等于 pi|j p i | j ,低维空间中 qj|i q j | i 不等于 qi|j q i | j ,于是提出对称 SNE,采用更加通用的联合概率分布代替原始的条件概率,使得 pij p i j = pji p j i qij q i j = qji q j i

简单来讲,在低维空间中定义 qij q i j

当然,在高维空间我们也可以定义 pij p i j

但是在高维空间中这样的定义会带来异常值的问题,怎么理解呢?假设点 xi x i 是一个噪声点,那么 || xi x i - xj x j || 的平方会很大,那么对于所有的 j, pij p i j 的值都会很小,导致在低维映射下的 yi y i 对整个损失函数的影响很小,但对于异常值,我们显然需要得到一个更大的惩罚,于是对高维空间中的联合概率修正为:

这样就避免了异常值的问题,此时的梯度变为:

相比于原始 SNE,对称 SNE 的梯度更加简化,计算效率更高。但对称SNE的效果只是略微优于原始SNE的效果。

2、引入 t 分布

我们回到刚才 SNE 存在的两个缺点的第二个,拥挤问题,这个问题的解决在 t-SNE 中就是使用 t 分布。t 分布是一种长尾分布,从图中可以看到,在没有异常点时,t 分布与高斯分布的拟合结果基本一致。而在第二张图中,出现了部分异常点,由于高斯分布的尾部较低,对异常点比较敏感,为了照顾这些异常点,高斯分布的拟合结果偏离了大多数样本所在位置,方差也较大。相比之下,t 分布的尾部较高,对异常点不敏感,保证了其鲁棒性,因此其拟合结果更为合理,较好的捕获了数据的整体特征。
这里写图片描述

那么如何利用 t 分布的长尾性来改进 SNE 呢?我们来看下面这张图,注意这个图并不准确,主要是为了说明 t 分布是如何发挥作用的。

图中有高斯分布和 t 分布两条曲线,表示点之间的相似性与距离的关系,高斯分布对应高维空间,t 分布对应低维空间。那么对于高维空间中相距较近的点,为了满足 pij p i j = qij q i j ,低维空间中的距离需要稍小一点;而对于高维空间中相距较远的点,为了满足 pij p i j = qij q i j ,低维空间中的距离需要更远。这恰好满足了我们的需求,即同一簇内的点(距离较近)聚合的更紧密,不同簇之间的点(距离较远)更加疏远。

引入 t 分布之后,在低维空间中,用自由度为1的t分布重新定义 :

然后与原始 SNE 一样,我们使用 K-L 散度定义目标函数进行优化,从而求解。至此,关于 t-SNE 算法的原理部分,我们就介绍完了。

3、总结

总结一下 t-SNE 算法的改进:

  • 把SNE变为对称SNE,提高了计算效率,效果稍有提升
  • 在低维空间中采用了t分布代替原来的高斯分布,解决了拥挤问题,优化了SNE过于关注局部特征忽略全局特征的问题
    下面是 SNE 算法和 T-SNE 算法的可视化结果对比,可以看到, T-SNE 算法的效果要远远好于 SNE。

SNE:

T-SNE:

总结一下 t-SNE 算法的不足:

  • 主要用于可视化,很难用于其他目的.比如降维到10维,因为t分布偏重长尾,1个自由度的 t 分布很难保存好局部特征,可能需要设置成更高的自由度;
  • t-SNE 没有唯一最优解,且不能用于预测,比如测试集合降维,因为他没有显式的预估部分,不能在测试集合直接降维;
  • 速度慢

http://chatgpt.dhexx.cn/article/SvuTDl0v.shtml

相关文章

t-SNE概述

为了循序渐进, 先来学习SNE. SNE 无论是多维数据还是词向量, 都是一个个散落在空间中的点, 点与点之间距离近的, 就可以看作属于同一分类或近义词. 衡量两点距离有很多种手段, 但最常用的还是欧式距离, 所以欧氏距离与相似度的关系可以用某种公式近似表达, 这样就可以把空间信…

机器学习笔记 - 什么是t-SNE?

1、t-SNE概述 t-Distributed Stochastic Neighbor Embedding (t-SNE) 是一种无监督的非线性技术,主要用于数据探索和高维数据的可视化。简单来说,t-SNE 让您对数据在高维空间中的排列方式有一种感觉或直觉。它由 Laurens van der Maatens 和 Geoffrey Hinton 于 2008 年提出。…

可视化降维方法 t-SNE

本篇主要介绍很好的降维方法t-SNE的原理 详细介绍了困惑度perplexity对有效点的影响首先介绍了SNE然后在SNE的基础上进行改进:1.使用对称式。2.低维空间概率计算使用t分布 t-SNE(t分布和SNE的组合) 以前的方法有个问题:只考虑相…

t-SNE非线性降维

TSNE(t-Distributed Stochastic Neighbor Embedding )是对SNE的改进,SNE最早出现在2002年,改变了MDN和ISOMAP中基于距离不变的思想,将高维映射到低维的同时,尽量保证相互之间的分布概率不变,SNE…

t-SNE原理及代码

SNE 基本原理 SNE是通过仿射变换将数据点映射到概率分布上,主要包括两个步骤:  1) SNE构建一个高维对象之间的概率分布,使得相似的对象有更高的概率被选择,而不相似的对象有较低的概率被选择。   2) SN…

t-SNE 原理及Python实例

由于毕业设计有部分工作需要对比两个图像数据集合的差异,为了可视化差异,利用了目前降维首选的t-SNE。我花了点时间看了sklearn里面关于这部分的文档,也查阅了相关博客,最终成功的将两种图片数据集作了一个可视化的对比。我觉得这…

t-SNE算法解析与简单代码实现

t-SNE算法解析与简单代码实现 t-SNESNE基本原理和介绍SNE原理推导t-SNE的引入Symmetric SNE拥挤现象关于 σ \sigma σ的求法 代码解析参数说明 Reference t-SNE t-SNE感觉就是将两个数据点的相似度转换为实际距离的算法 t-SNE(t-distributed stochastic neighbor embedding)是…

t-SNE

t-SNE 文章目录 t-SNE原理SNE(Stochastic Neighbor Embedding)t-SNE对称SNE拥挤问题不匹配的尾部可以补偿不匹配的维度 sklearn.manifold.TSNE参数返回对象的属性Methods 附录Kullback-Leibler divergencest-distributionmanifold learning(流形学习)Swi…

【33】t-SNE原理介绍与对手写数字MNIST的可视化结果

如有错误,恳请指出。 这篇博客将会介绍一个无监督的降维算法——t-SNE,其是一个常用的降维可视化工具,下面会记录一下李宏毅老师对其的原理介绍,然后我做了一个实验,用其来对手写数字(MNIST数据集&#xff…

【论文学习之SNE-RoadSeg】跑通SNE-RoadSeg代码

0 序言 作为一个论文学习的小白,第一次去跑一篇论文代码可谓是下了老大功夫。从一开始的陌生,到现在逐渐熟练,对于如何正确跑通论文代码也有了较为清晰的方法步骤。这段时间跟着学长学习研究论文SNE-RoadSeg,所以接下来我将围绕此…

降维系列之 SNE与t-SNE

t-SNE是一种经典的降维和可视化方法,是基于SNE(Stochastic Neighbor Embedding,随机近邻嵌入)做的,要了解t-SNE就要先了解SNE。本文同样既是总结,又是读论文笔记。 SNE 随机近邻嵌入 SNE的的第一步是用条…

t-SNE算法详解

前言 此处只作为自己学习理解的笔记之用,转载于https://blog.csdn.net/sinat_20177327/article/details/80298645 t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 和 Geoffrey Hinton在…

t-SNE数据降维可视化

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

【机器学习】基于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的目的是,从模型的特征层面进行一定的可…