我正在寻找 R 中稀疏矩阵的快速 NMF 实现。
RNMF包由许多算法组成,但这些算法在计算时间方面都没有给人留下深刻的印象。
NNLM::nnmf()目前看来 R 中最先进的技术,特别是method = "scd"和loss = "mse",实现为通过顺序坐标下降求解的交替最小二乘法。然而,这种方法在非常大、非常稀疏的矩阵上相当慢。
该rsparse::WRMF函数非常快,但这是因为只有正值用于和A的逐行计算WH的逐行计算。
是否有在稀疏矩阵上求解 NMF 的合理实现?
scikit-learnR 中有等价的吗?看到这个问题
R 中有各种工作函数,例如fnnls, tsnnls,但没有一个超越nnls::nnls(用 Fortran 编写)。我无法将这些函数中的任何一个编码到更快的 NMF 框架中。
忘记了我什至发布了这个问题,但一年后......
我在 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 级分解。我认为这是非常合理的。
| 归档时间: |
|
| 查看次数: |
967 次 |
| 最近记录: |