我们通常有相当大的数据集来建模,只是为了给你一个想法:
- 超过 100 万个特征(稀疏的,平均特征人口约为 12%);
- 超过 60M 行。
许多建模算法和工具无法扩展到如此广泛的数据集。
所以我们正在寻找一种分布式运行的降维实现(即在Spark/Hadoop/等中)。我们认为将功能数量减少到数千个。
由于 PCA 在矩阵乘法上运行,它不能很好地分布在服务器集群上,我们正在研究其他算法,或者可能,在分布式降维的其他实现中。
有人遇到过类似的问题吗?你做什么来解决这个问题?
有一个关于“广义低秩模型”的康奈尔/斯坦福摘要http://web.stanford.edu/~boyd/papers/pdf/glrm.pdf专门讨论了这一点:
- 第 8 页“并行化交替最小化”讲述了它是如何分布的;
- 第 9 页“缺失数据和矩阵补全”讨论了如何处理稀疏/缺失数据。
虽然 GLRM 似乎是我们正在寻找的东西,但我们找不到这些想法的良好实际实现。
有人为 Spark 编写了一个版本(例如 https://github.com/rezazadeh/spark/tree/glrm/examples/src/main/scala/org/apache/spark/examples/glrm 但它看起来更像是概念而不是我们可以在生产中使用的版本);
H2O 有一个 GLRM 版本 http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/glrm.html 但它实际上并没有扩展到我们的数据集大小(见上文)。
2018 年 7 月 15 日更新:另一个摘要是来自 Facebook 的快速随机 SVD(在此处阅读http://tygert.com/spark.pdf)以及使用 ALS 进行低秩矩阵逼近的想法 - http://tygert.com /als.pdf。虽然现在没有明确的方法如何使用它们 - 请参阅https://github.com/facebook/fbpca/issues/6上的讨论
任何其他想法如何解决这个问题?其他可用的 GLRM 或其他分布式降维实现?