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

机器算法验证 数据可视化 降维 多维尺度 特纳
2022-02-13 01:27:02

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

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

这是否有意义,或者它是否违背了 t-sne 的设置。

4个回答

我有完全相同的问题,并将其发布在几周前 Andrej Karpathy 的 CS231n 讲座的 YouTube 视频中。这是我发布的问题,然后是 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 实现开箱即用。通常每个点的位置都是优化中的一个参数,但您也可以创建一个从高维 -> 低维(例如神经网络)的映射并通过这些位置进行反向传播。然后你最终得到了嵌入功能,并可以投射新的点。所以原则上没有什么能阻止这一点,但一些实现可能不支持它,因为它是一个不太常见的用例。

在处理流数据时,您可能不希望/不需要将历史中的所有点嵌入到单个 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,Learning stable representations in a changed world with on-line t-SNE: proof of concept in the songbird),其中成功应用跟踪音节在鸣禽发展过程中的出现。

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

引用:arXiv:1512.01655

用于渐进式视觉分析的近似和用户可控 tSNE Nicola Pezzotti、Boudewijn PF Lelieveldt、Laurens van der Maaten、Thomas Höllt、Elmar Eisemann、Anna Vilanova

概括:

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

Barnes-Hut 近似使 t-SNE 具有高度可扩展性(至少,您可以将它与 100 000 行一起使用,我试过了)。您可以从 R 调用它:Rtsne

实现算法的复杂度为(n日志(n))而天真的实现的复杂性为(n2). 底层近似的细节可以在这里找到使用基于树的算法加速 t-SNE。