提高python中t-sne实现的速度以处理海量数据


18

我想对将近100万个具有200个维度的向量进行降维doc2vec。我使用TSNE从执行sklearn.manifold模块它和主要问题是时间复杂度。即使使用method = barnes_hut,计算速度仍然很低。有时甚至耗尽了内存。

我正在具有130G RAM的48核处理器上运行它。是否有一种方法可以并行运行它或利用大量资源来加快此过程。


您是否尝试过在Spark等框架中进行地图缩减?
Dawny33

不,..它是如何工作的,你能指导我吗?
yazhi 2016年

仔细

1
查看 Spark实现是否有效。
Emre '02

1
是Spark的Scala。如果您想要python实现,则可以翻译它;Spark也在python上运行。
Emre '02

Answers:



7

查看基于FFT加速的基于插值的t-SNE(papercodePython package)。

从摘要:

我们提出了基于快速傅里叶变换的基于插值的t-SNE(FIt-SNE),它极大地加快了t-SNE的计算速度。t-SNE最耗时的步骤是卷积,我们通过内插到等距网格上并随后使用快速傅里叶变换来执行卷积来加速卷积。我们还使用多线程近似最近邻居优化了高维输入相似度的计算。

本文还包括一个具有一百万个点和100个维度的数据集的示例(类似于OP的设置),这似乎需要大约1个小时。


5

由于没有任何答案,因此我在github页上问了我自己,该问题已通过GaelVaroquaux声明以下答复来解决。

如果只想并行化向量运算,则应使用通过MKL编译的numpy构建(不要自己尝试,这很具有挑战性)。

在算法本身中可能存在高级并行性的方法,这可能会带来更大的收益。但是,快速浏览一下代码后,我没有发现任何清晰的方法。

我要继续解决这个问题,因为它更多地是蓝天白云。我完全同意,我希望TSNE能够走得更快,并且并行化很容易就太好了。但是在目前的情况下,需要更多的工作来处理这种愿望清单。


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.