分布式 PCA 或等价物

数据挖掘 降维 主成分分析 分散式 矩阵分解
2021-10-09 05:02:00

我们通常有相当大的数据集来建模,只是为了给你一个想法:

  • 超过 100 万个特征(稀疏的,平均特征人口约为 12%);
  • 超过 60M 行。

许多建模算法和工具无法扩展到如此广泛的数据集。

所以我们正在寻找一种分布式运行的降维实现(即在Spark/Hadoop/等中)。我们认为将功能数量减少到数千个。

由于 PCA 在矩阵乘法上运行,它不能很好地分布在服务器集群上,我们正在研究其他算法,或者可能,在分布式降维的其他实现中。

有人遇到过类似的问题吗?你做什么来解决这个问题?

有一个关于“广义低秩模型”的康奈尔/斯坦福摘要http://web.stanford.edu/~boyd/papers/pdf/glrm.pdf专门讨论了这一点:

  1. 第 8 页“并行化交替最小化”讲述了它是如何分布的;
  2. 第 9 页“缺失数据和矩阵补全”讨论了如何处理稀疏/缺失数据。

虽然 GLRM 似乎是我们正在寻找的东西,但我们找不到这些想法的良好实际实现。

2018 年 7 月 15 日更新:另一个摘要是来自 Facebook 的快速随机 SVD(在此处阅读http://tygert.com/spark.pdf)以及使用 ALS 进行低秩矩阵逼近的想法 - http://tygert.com /als.pdf虽然现在没有明确的方法如何使用它们 - 请参阅https://github.com/facebook/fbpca/issues/6上的讨论

任何其他想法如何解决这个问题?其他可用的 GLRM 或其他分布式降维实现?

2个回答

Spark 的机器学习库 (MLlib) 中有主成分分析 (PCA)

从问题描述中,最让我印象深刻的是类似 X 翼的自动编码器。基本上你有 2 个神经网络,它们可以有任何流行的神经网络架构,如全连接、卷积和池化层,甚至是 LSTM/GRU、编码器和解码器等顺序单元。如果编码维度远小于原始维度,则可以将其用作输入的较低维度表示。解码器用于检索原始维度/信息。有许多类型的自动编码器,但对于这个用例,您可以查看稀疏和去噪自动编码器。您可以在深度学习书中阅读更多关于自动编码器的信息: https ://www.deeplearningbook.org/contents/autoencoders.html

我真的不明白为什么您肯定需要进行分布式培训过程,但即使如此,也有 Tensorflow 的分布式实现,因此您可以对 Tensorflow 文档进行一些研究。此外,如果你想学习一个新框架,Uber 的 Horovod 是一个用于编写 Tensorflow 解决方案的分布式框架:https ://github.com/uber/horovod

我想说的最后一个评论是关于数据的基本维度。您提到可接受的尺寸是数千。以我的经验,稀疏数据存在于更小的流形中。所以我建议将编码维度视为超参数并针对相应的损失函数进行优化。