是否有用于流数据的t-SNE版本?


19

我对t-SNE和Barnes-Hut近似的理解是,需要所有数据点,以便可以同时计算所有力的相互作用,并且可以在2d(或更低维)图中调整每个点。

是否有任何版本的t-sne可以有效处理流数据?因此,如果我的观测一次到达一个观测,它将在2d地图上找到最佳位置以放置新观测,或者连续更新2d地图上的所有点以解决新观测。

这甚至有意义还是与t-sne的设置背道而驰?


Barnes-Hut逼近使t-SNE具有高度可扩展性(我尝试过,至少可以将其与10万条线一起使用)。您可以从R调用它:cran.r-project.org/web/packages/Rtsne/index.html
RUser4512

嘿,谢谢!如果您将答案放在此答案部分,我很乐意为您的答案投票。
2015年

3
有关使用神经网络实现的参数版本,请参见此处。lvdmaaten.github.io/publications/papers/AISTATS_2009.pdf
eyaler 2016年

Answers:


15

我有完全相同的问题,并将其发布在YouTube视频上,该视频是几周前Andrej Karpathy讲的CS231n演讲的。这是我发布的问题,随后是安德烈(Andrej)的回复:

https://www.youtube.com/watch?v=ta5fdaqDT3M&lc=z12ji3arguzwgxdm422gxnf54xaluzhcx

问:

t-SNE是否需要整批图像(或更一般地说,数据)来创建低维特征空间?使用PCA,您可以在一批数据上创建一个低维特征空间,然后将新的数据点投影到相同的空间上,而无需“重新训练”。这对于t-SNE是正确的吗?

我之所以问是因为,我注意到scikit-learn将t-SNE作为其流形类的一部分,但是该模块没有PCA那样具有transform()方法。因此,至少在sklearn中,这似乎是不可能的。

我的问题可以归结为这一点。在流媒体或在线情况下,如果您想用新图像不断更新可视化效果,您将如何应用t-SNE?据推测,对于每个新图像,都不希望在整个批次中应用该算法。

A:

+ Evan Zamir是的,使用t-SNE可以实现,但常规t-SNE实施可能不支持。通常,每个点的位置都是优化中的一个参数,但是您也可以从高D->低D(例如神经网络)到反向传播通过这些位置创建映射。然后,您将获得嵌入功能并可以投影新点。因此,原则上没有什么可以阻止此操作的,但是某些实现可能不支持此操作,因为它的使用频率较低。


11

处理流数据时,您可能不希望/不需要将历史中的所有点都嵌入到单个t-SNE地图中。或者,您可以按照以下简单步骤执行在线嵌入

  1. 选择持续时间T的时间窗口,该窗口足够长,以使每个感兴趣的模式在窗口持续时间中至少出现两次。

  2. 在数据流进入时滚动窗口,时间步长dt小于T。对于窗口的每个位置,计算时间窗口中数据点的t-SNE嵌入。

  3. 将每个嵌入与前一个的结果一起播种。在t-SNE中,需要选择低维空间中数据点的初始坐标。在我们的例子中,因为我们选择的dt比T小得多,所以两个连续的嵌入共享它们的大部分数据点。对于所有共享数据点,将它们在当前嵌入中的初始坐标与在先前嵌入中的最终坐标相匹配。此步骤将确保相似的图案在连续的嵌入中具有一致的表示。(在python 的sklearn实现中,seed参数为“ init”。默认情况下,sklearn实现随机设置点的初始位置)

注1:重要的是,感兴趣的模式在任何给定的时间窗口中至少出现一次,这样,当窗口在数据集中滑动时,表示的内存就不会丢失。实际上,t-SNE通常不会收敛到唯一的解决方案,而只会收敛到局部最小值,因此,如果内存丢失,则在嵌入的两个实例中可能以非常不同的方式表示相似的模式。

注意2:在处理非平稳时间序列时,此方法特别有用,因为该时间序列希望跟踪随时间缓慢变化的模式。实际上,每个嵌入在这里都专门针对计算它的较小时间窗口,以确保以最佳方式捕获时间局部结构(相反,是整个非平稳数据集的完全嵌入)。

注意3:在这种方法中,连续的嵌入无法并行化,因为一个种子需要前一个嵌入的结果才能播种下一个。但是,由于对于大多数点(成功嵌入之间的所有共享点)都很好地选择了种子(即点的初始坐标),因此嵌入通常仅在几次迭代中就非常快速地收敛。

有关将此方法应用于非平稳时间序列的示例,请参见本文(ICLR 2016,使用在线t-SNE学习不断变化的世界中的稳定表示形式:鸣禽中的概念证明),该方法已成功应用。跟踪音节在整个鸣禽开发过程中的出现。


2
欢迎来到社区。自-窃是不酷的。我在这里提到你的第一篇文章。当然,我们可以对多个答案使用相同的原理,可能会复制或粘贴一个或两个短语,或者直接链接到先前的答案。话虽这么说,但不要将您的帖子降低为第一句已更改的以前答案的逐字副本。它降低了简历内容的质量,并显示您的学术体育水平差。
usεr11852恢复单胞菌说,

5
@usεr11852出现了问题,因为另一个线程与此线程重复。因此,我关闭了另一个,将其与这个合并,并删除了多余的答案。通常,Stéphane,只要您有灵感在两个线程中发布完全相同的答复,请仅将其中一个标记为重复,以便我们将其合并。
ub

2
@usεr11852好,很抱歉,重复的答案,我是一名新撰稿人,所以我不知道最佳实践。
斯特凡拒绝

1
@whuber感谢您合并问题并引起注意!
斯特凡拒绝

1
结果您似乎丢失了2个投票。那真不幸。+1 :)欢迎来到简历。
变形虫说莫妮卡(Monica)恢复工作

7

最近发布了一个称为A-tSNE的变体,它支持根据兴趣区域或用户输入动态添加新数据并优化集群。下面链接的论文有一些很好的例子:

引用:arXiv:1512.01655

逐步可视化分析的近似和用户可控tSNE Nicola Pezzotti,Boudewijn PF Lelieveldt,Laurens van der Maaten,ThomasHöllt,Elmar Eisemann,Anna Vilanova

摘要:

渐进式可视化分析旨在通过可视化以及与中间结果的交互来改善现有分析技术中的交互性。数据分析的一种关键方法是降维,例如,生成可以有效可视化和分析的2D嵌入。t分布随机邻居嵌入(tSNE)是一种适用于可视化多个高维数据的技术。tSNE可以创建有意义的中间结果,但初始化速度慢,这限制了它在渐进式可视化分析中的应用。我们介绍了一种可控的tSNE近似值(A-tSNE),它在速度和准确性之间进行权衡,以实现交互式数据探索。我们提供实时可视化技术,包括基于密度的解决方案和用于检查近似度的魔术镜头。借助此反馈,用户可以决定局部优化并在分析过程中控制近似水平。我们在现实世界的研究场景中以及在对高维流进行实时分析的过程中,通过几个数据集展示了我们的技术,以说明其在交互式数据分析中的有效性。


欢迎来到该网站。我们正在尝试以问题和解答的形式建立永久的高质量统计信息存储库。因此,由于linkrot,我们对仅链接的答案保持警惕。您可以在链接上发布完整的引文和信息摘要,以防万一它消失了?
gung-恢复莫妮卡

6

Barnes-Hut逼近使t-SNE具有高度可扩展性(我尝试过,至少可以将其与10万条线一起使用)。您可以从R调用它:Rtsne

Øñ日志ñØñ2


1
我将其与250K密集的1K线一起使用-确实不错,但受内存限制。
弗拉基米尔·乔巴欣(Fladimir Chupakhin)'16

2

从0.17.0版开始,Barnes-Hut近似现在是scikit-learn中的默认方法:

默认情况下,梯度计算算法使用以O(NlogN)时间运行的Barnes-Hut逼近。method ='exact'将在O(N ^ 2)时间内以较慢但精确的算法运行。当最近邻居误差需要大于3%时,应使用精确算法。但是,确切的方法无法扩展到数百万个示例。版本0.17中的新功能:通过Barnes-Hut的近似优化方法。


这没有解决问题。BH虽然速度更快,但不支持流式传输。也许您的意思是说这是对此答案的评论。
merv
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.