计算数据极其稀疏的非常大的正矩阵(65M x 3.4M)的奇异值分解(SVD)的最佳方法是什么?
少于 0.1% 的矩阵是非零的。我需要一种方法:
- 将适合记忆(我知道存在在线方法)
- 将在合理的时间内计算:3,4 天
- 将足够准确,但准确性不是我主要关心的问题,我希望能够控制我投入多少资源。
拥有一个实现它的 Haskell、Python、C# 等库会很棒。我没有使用 mathlab 或 R,但如有必要,我可以使用 R。
计算数据极其稀疏的非常大的正矩阵(65M x 3.4M)的奇异值分解(SVD)的最佳方法是什么?
少于 0.1% 的矩阵是非零的。我需要一种方法:
拥有一个实现它的 Haskell、Python、C# 等库会很棒。我没有使用 mathlab 或 R,但如有必要,我可以使用 R。
如果它适合内存,请使用Matrix 包在 R 中构造一个稀疏矩阵,并尝试irlba用于 SVD。您可以指定结果中需要多少个奇异向量,这是限制计算的另一种方法。
这是一个相当大的矩阵,但过去我用这种方法取得了非常好的结果。 irlba
是相当先进的。它使用隐式重启的 Lanczos 双对角化算法。
它可以在几毫秒内浏览 netflix 奖品数据集(480,189 行 x 17,770 列,100,480,507 个非零条目)。你的数据集比 Netflix 数据集大约 200,000 倍,所以它需要的时间要长得多。期望它可以在几天内完成计算可能是合理的。