考虑到它们是非参数的,t-SNE 或 UMAP 如何嵌入新的(测试)数据?

机器算法验证 r 降维 无监督学习 特纳
2022-03-14 23:04:31

我已经开始使用 UMAP 方法进行降维,这是一种类似于 t-SNE、扩散图、拉普拉斯特征图等的方法。

命名的降维方法的共同点是它们是非参数的,即没有简单直接的方法来嵌入新数据。

然而,在 Python 和 R的UMAP 包中,这种新数据的嵌入是可能的

在我的研究过程中,我找不到任何描述这些预测是如何产生的来源。我已通读UMAP 论文

有谁知道从数学的角度来看,UMAP 预测是如何在包中生成的?

1个回答

好问题。我将使用 t-SNE 来回答它,因为我认为它为更多人所熟悉。我认为 UMAP 非常有前途并且是一个巨大的贡献,但老实说,我对所有的营销和围绕它的炒作感到有点恼火。人们认为 t-SNE 不能嵌入新点,但 UMAP 奇迹般地可以。实际上,t-SNE 可以做到和 UMAP 一样好;这只是方便实施的问题。

一个吸引眼球的图:

在此处输入图像描述


它们是非参数的,即没有简单直接的方法来嵌入新数据

这并不完全正确。确实,t-SNE 是非参数的。这实际上意味着 t-SNE没有构造函数f(x):RpR2这将映射高维点x降到二维。相反,它将所有点定位在一个平面上并让它们“相互作用”:相似的点相互吸引,不同的点相互排斥,一段时间后相似的点聚集在一起。在实际实现中,每个点只感受到最近的吸引力k一些小的价值的邻居k.

现在想象你得到一个新的观点xtest. 没有功能f()这会给你它的二维位置f(xtest). 但是,您可以将它放在现有的 t-SNE 嵌入中的某个位置,并让它与所有现有点“交互”:它将被与其最相似的点(它最近的邻居)吸引,并与所有其他点排斥。仅允许移动该点,而所有现有点保持原位。如果一切顺利,xtest会到达离它最近的邻居很近的地方。

实际这样做时,最初将其定位在靠近其最近邻居的某个位置(例如,它的平均位置)是非常有帮助的。k最近的邻居),因为这将使收敛更快,更可靠。实际上,只需将其定位在其平均位置k最近的邻居已经可以很好地工作,根本不需要进一步优化

[顺便说一句:如果一个人有一大堆测试点,那么可以一个一个独立处理,或者尝试将它们全部嵌入在一起,让它们相互交互。如果所有测试点彼此相似但与原始点不同,这可能会产生非常不同的结果。在前一种情况下,测试点将被“强制”到现有的嵌入中。在后一种情况下,它们将作为一个单独的集群聚集在一起。]

我知道有几篇生物学论文使用了这种方法的一些变体。Berman 2014Macosko 2015就是两个这样的例子。这是 t-SNE https://github.com/pavlin-policar/openTSNE的一个非常好的和非常快的最近 Python 实现,它允许嵌入新点开箱即用。引用文档https://opentsne.readthedocs.io/en/latest/

[t-SNE 多年来受到了一些批评,其中之一是] t-SNE 是非参数的,因此不可能将新样本添加到现有嵌入中。这个论点经常被重复,很可能是因为大多数软件包根本没有花时间来实现这个功能。t-SNE 是非参数的,意味着它不学习函数f将样本从环境空间投影到嵌入空间。然而,t-SNE 的目标函数定义良好,并且可以通过获取数据点并优化其相对于现有嵌入的位置,轻松地将新样本添加到现有嵌入中。这是我们所知道的唯一可用的实现,它允许向现有嵌入添加新点。

上图来自https://github.com/berenslab/rna-seq-tsne/,这是本文的配套存储库:https ://www.nature.com/articles/s41467-019-13056-x 。


关于 UMAP,正如您所说,测试集嵌入背后的数学没有在任何地方明确描述,但我很确定它就是这样做的。简要查看源代码似乎可以确认这一点。