R 中稀疏矩阵上的快速 NMF

Fast NMF in R on sparse matrices

我正在寻找 R 中稀疏矩阵的快速 NMF 实现。

R NMF 包包含许多算法,none 其中在计算时间方面令人印象深刻。

NNLM::nnmf() 目前在 R 中似乎是最先进的,特别是 method = "scd"loss = "mse",实现为通过顺序坐标下降求解的交替最小二乘法。但是,这种方法在非常大、非常稀疏的矩阵上非常慢。

rsparse::WRMF 函数非常快,但这是因为 A 中只有正值用于 W 和 [=17= 的逐行计算].

在稀疏矩阵上求解NMF有什么合理的实现吗?

在 R 中是否有等同于 scikit-learn 的东西?参见

R中的fnnlstsnnls等worker函数多种多样,none超过了nnls::nnls(Fortran语言编写)。我无法将这些函数中的任何一个编码到更快的 NMF 框架中。

忘了我什至发布了这个问题,但是一年后...

我在 RcppEigen 中写了一个非常快速的 NMF 实现,参见 RcppML CRAN 上的 R 包。

install.packages("RcppML")

# for the development version
devtools::install_github("zdebruine/RcppML")

?RcppML::nmf

它至少比 NNLM::nnmf 快一个数量级,相比之下,RcppML::nmf 可以与 irlba::irlba SVD 的运行时间相媲美(尽管它是一种完全不同的算法)。

我已经成功地将我的实现应用于 130 万个包含 26000 个基因的单细胞,在 96% 的稀疏矩阵中在 1 分钟内进行 100 秩分解。我觉得很有道理。