R 中稀疏矩阵上的快速 NMF

sis*_*nts 3 r nmf

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

RNMF包由许多算法组成,但这些算法在计算时间方面都没有给人留下深刻的印象。

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

rsparse::WRMF函数非常快,但这是因为只有正值用于和A的逐行计算WH的逐行计算。

是否有在稀疏矩阵上求解 NMF 的合理实现?

scikit-learnR 中有等价的吗?看到这个问题

R 中有各种工作函数,例如fnnls, tsnnls,但没有一个超越nnls::nnls(用 Fortran 编写)。我无法将这些函数中的任何一个编码到更快的 NMF 框架中。

sis*_*nts 7

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

我在 RcppEigen 中编写了一个非常快速的 NMF 实现,请参阅RcppMLCRAN 上的 R 包。

install.packages("RcppML")

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

?RcppML::nmf
Run Code Online (Sandbox Code Playgroud)

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

我已成功将我的实现应用于 130 万个包含 96% 稀疏矩阵中 26000 个基因的单细胞,在 1 分钟内进行 100 级分解。我认为这是非常合理的。