可视化降维方法 t-SNE

article/2025/9/29 11:28:35

本篇主要介绍很好的降维方法t-SNE的原理

  • 详细介绍了困惑度perplexity对有效点的影响
  • 首先介绍了SNE
  • 然后在SNE的基础上进行改进:1.使用对称式。2.低维空间概率计算使用t分布

t-SNE(t分布和SNE的组合)

  • 以前的方法有个问题:只考虑相近的点在降维后应该接近,但没有考虑不相近的点在降维后应该比较远
  • t-SNE主要原理为:
    在这里插入图片描述
    其中 S ( x i , x j ) S(x^i , x^j) S(xi,xj) 代表 x i x^i xi x j x^j xj 之间的相似度

SNE

原理:

在这里插入图片描述

这里可以看做高斯函数, ∣ ∣ x i − x j ∣ ∣ 2 {||x_i - x_j||}^2 xixj2 是自变量 , 也就是横坐标,高斯函数的值是纵坐标。方差越大,高斯函数越平滑,概率高的点就比较多。方差越小,函数越尖锐,概率大的点就比较少。可以认为,当我们在寻找一个点的邻近点时,方差可以调节我们寻找的主要邻近点的个数

在这里插入图片描述

特点

  • 考虑计算原始空间中,其他所有点 j 与点 i 之间的距离,并转换为概率,代表相似程度

  • 用指数,距离一拉开,相似度会迅速下降

  • 我们的目标就是在目标空间中找其他所有点 j 与点 i 之间的距离,并转换为概率,且这个概率和原始空间的概率越接近越好

    • 接近就代表着分布类似
    • 保证了离得近的点还离得近,离得远的点还离得远
      • 这是该算法的很重要的优点
      • 以前的算法要么只考虑距离远的点还要距离远,要么只考虑距离近的点还要距离近
    • 计算量很大,因为每个点都要算 P 和 Q

困惑度(perplexity):

在这里插入图片描述

在这里插入图片描述

  • 困惑度可以解释为有效邻居(其他点也考虑,只不过占比重太小了,不是有效邻居)的平滑方法

  • H ( P i ) H(P_i) H(Pi) 是 Shannon Entropy 。

    • 用来解释混乱度,怎么理解混乱度呢?

      • 比如一个分类任务,将一个物体分为两个类
      • H = − ∑ ( p i ) log ⁡ ( p i ) H = -\sum(p_i)\log(p_i) H=(pi)log(pi)
      • 如果分为第一个类的概率 p 1 = 1 p_1 = 1 p1=1 , 显然 p 2 = 0 p_2 = 0 p2=0 , 这时的 H = 0 + 0 = 0 H = 0 + 0 = 0 H=0+0=0 , 这时H小,意味着混乱度低,因为我们可以明确如何进行分类,所以不混乱
      • 如果分为第一个类的概率 p 1 = 0.5 p_1 = 0.5 p1=0.5 , 显然 p 2 = 0.5 p_2 = 0.5 p2=0.5 , 这时 H = − ( 0.5 log ⁡ 0.5 + 0.5 log ⁡ 0.5 = − log ⁡ 0.5 ) H = -(0.5\log0.5 \quad + \quad0.5\log0.5 = -\log0.5 ) H=(0.5log0.5+0.5log0.5=log0.5) 这时 , H的值达到最大。意味着混乱度高,因为我们无法确定如何分类
      • 对应到混乱度函数的图像中,就是 p p p 的值越接近中间,混乱度越大,越接近两边,混乱度越小。
      • 上面我们讨论的是两个 p p p 的情况 , 扩展到多个 p p p 也一样。各个 p p p 越靠近中间,混乱度越大(也就是 H 大)
    • 如图, p p p 分布在两端时,函数的值比较小。如果 H H H 的值增大,则意味着,有更多的 p p p 往中间分布了(左边的往右移动,右边的往左移动),也就是我们在大 p p p 和小 p p p 之间做了一个均衡 ,小的 p p p 变大了 , 大的 p p p 变小了,各个 p p p 更接近了。这时候就代表着,我们在寻找一个点的邻近点时,考虑了更多的有效点(以前有些离得太远的点没有认定为有效点

    • p p p 的值放到下面的高斯函数图像中观察,这就对应 σ \sigma σ 更大。也就是高斯分布更平滑了。因为,高斯分布越平滑,能获得比较大的值的点越多,也就是距离稍远的点也有不错的高斯函数值。这些点对应的 p p p 也就变大了,对loss的影响也变大,成为有效点。

在这里插入图片描述
也就是说,我们可以通过调节困惑度 perplexity 来调节 H , 进而调节 σ \sigma σ

  • 困惑度越大 , H就越大 , σ \sigma σ 就越大 , 我们在寻找一个点的邻近点的时候就会考率更多的有效点
  • 困惑度越大,越考虑全局(考虑的点更多,更远),困惑度越小,越考虑局部(考虑的点更少,更近)

评价标准:K-L散度

C = ∑ i K L ( P i ∥ Q i ) = ∑ i ∑ j p j ∣ i log ⁡ p j ∣ i q j ∣ i C=\sum_{i} K L\left(P_{i} \| Q_{i}\right)=\sum_{i} \sum_{j} p_{j \mid i} \log \frac{p_{j \mid i}}{q_{j \mid i}} C=iKL(PiQi)=ijpjilogqjipji

  • p j ∣ i p_{j|i} pji 越大 , q j ∣ i q_{j|i} qji 越小时 , 此时的Cost越高。即高维空间的点越接近,映射到低维空间时反而越远,此时的惩罚是很大的,这是正确的情况。

  • p j ∣ i p_{j|i} pji 越小 , q j ∣ i q_{j|i} qji 越大时 , 此时的Cost越小。即高维空间的点距离远时,映射到低维空间的点接近时,此时的惩罚却很小,这时跟我们想要的结果正好相反。
    这个问题也是t-SNE的一个缺点。

    因此SNE倾向于保留局部特征,即让高维离得近的点尽可能在低维时聚在一起,但是不考虑不同类间的间隔,直观理解为:整个降维后的图像会比较“拥挤”(原因就是上面这个,导致长程斥力不够)

t-SNE

优化:相较于SNE,有两方面优化

  • 优化了 p 和 q 的对称性
  • 使用 t 分布优化了 q

对称性:

注意到,概率函数具有不对称性,即 P i ∣ j ≠ P j ∣ i P_{i|j} \ne P_{j|i} Pij=Pji Q i ∣ j ≠ Q j ∣ i Q_{i|j} \ne Q_{j|i} Qij=Qji ,因为分母不一样。这与我们的直觉不符,无论 x i x_i xi x j x_j xj 谁作为中心,其出现在对方附近的概率应该是相同的

在这里插入图片描述

当然我们也可以在原空间(高维空间)中定义
在这里插入图片描述

但是这样会带来问题:假设点 x i x_i xi 是一个噪声点,那么 ∣ x i − x j ∣ |x_i - x_j| xixj 的平方会很大,那么对于所有的 j, p i j p_{ij} pij 的值都会很小,导致在低维映射下的 y i y_i yi 对整个损失函数的影响很小,但对于异常值,我们显然需要得到一个更大的惩罚

于是我们定义: p i j = p i ∣ j + p j ∣ i 2 n p_{ij} = \frac{p_{i|j} + p_{j|i}}{2n} pij=2npij+pji

这样既保证了对称,又不会导致概率值像上面一样小(因为如果 i i i 是噪声 , 那么 P i ∣ j P_{i|j} Pij 就会比 P j ∣ i P_{j|i} Pji 大得多)

t分布优化q

t分布优化后的q
q i j = ( 1 + ∥ y i − y j ∥ 2 ) − 1 ∑ k ≠ l ( 1 + ∥ y i − y j ∥ 2 ) − 1 q_{i j}=\frac{\left(1+\left\|y_{i}-y_{j}\right\|^{2}\right)^{-1}}{\sum_{k \neq l}\left(1+\left\|y_{i}-y_{j}\right\|^{2}\right)^{-1}} qij=k=l(1+yiyj2)1(1+yiyj2)1
梯度
δ C δ y i = 4 ∑ j ( p i j − q i j ) ( y i − y j ) ( 1 + ∥ y i − y j ∥ 2 ) − 1 \frac{\delta C}{\delta y_{i}}=4 \sum_{j}\left(p_{i j}-q_{i j}\right)\left(y_{i}-y_{j}\right)\left(1+\left\|y_{i}-y_{j}\right\|^{2}\right)^{-1} δyiδC=4j(pijqij)(yiyj)(1+yiyj2)1

q i j q_{ij} qij 太大或者太小时,也就是 ( y i − y j ) (y_i - y_j) (yiyj) 太大或者太小,都会导致梯度趋近于0 , 这不利于更新点 i i i 的坐标,这是目前的一个问题。不过一般情况下,这种情况出现比较少,而且其他点的的更新也会影响点 i i i 的梯度
映射后的样本相似度采用 t-分布的一种是对SNE的改进,这里改变的是 q , 且 q 已经经过对称优化了

在这里插入图片描述
横轴表示距离,纵轴表示相似度, 可以看到,对于较大相似度的点,t分布在低维空间中的距离需要稍小一点;而对于低相似度的点,t分布在低维空间中的距离需要更远。这恰好满足了我们的需求,即同一簇内的点(距离较近)聚合的更紧密,不同簇之间的点(距离较远)更加疏远。
一句话来说:因为我们的目的是令 q i j q_{ij} qij p i j p_{ij} pij 相等。若达成这个目标,在低维空间中,近的点会更近,远的点会更远


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

相关文章

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的目的是,从模型的特征层面进行一定的可…

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维,进行可…