【发布时间】:2015-03-01 15:48:34
【问题描述】:
如何在尺寸极其稀疏的矩阵(例如 70000 x 70000)上运行 svd 和 nmf?该矩阵的稀疏版本可以存储为磁盘上小于 700M 的二进制文件。我是否可以将其分解为稀疏格式(如磁盘上的文件或可存储在内存中)而不重构整个矩阵,而这将无法存储在内存中(甚至难以存储在磁盘上)?
我知道 R 中有 irlba,python 中有 sklearn 和 pymf >。但似乎他们需要重建矩阵? svd 的问题是我无法保存矩阵 S,V 和 D,但是如果我指定一个 K 并且只保存矩阵 S_k, V_k 和D_k对应k-最大特征值?而对于nmf,我想将其分解为rank = 100的W,可以存储在内存中。
如果有某些方法可以做到这一点,计算 svd 和 nmf 的预期时间是多少?任何帮助将不胜感激!
【问题讨论】:
-
与
Matrix包m2 <- Matrix(0, nrow = 7*10^4, ncol = 7*10^4, sparse = TRUE)仅是281632 bytes。 -
@Khashaa 谢谢!我不熟悉 R。那么我可以在 R 中像这样 svd 稀疏矩阵吗?尤其要考虑矩阵 S 和 D 可能是密集的。
-
@Floo0 谢谢!我检查了链接,但在那个问题中我没有看到矩阵的实际大小。似乎 irlba 适用于 svd (虽然我还没有尝试过)。但是 R 是否将 S 和 D 保存在内存中?此外,R中是否有任何方法适用于NMF?
-
我看了irlba的文档。它允许指定对限制计算有用的所需奇异向量的数量。至少对于 svd,irlba 似乎还可以。
标签: python r sparse-matrix svd matrix-factorization