【问题标题】:Fast NMF in R on sparse matrices稀疏矩阵上的 R 中的快速 NMF
【发布时间】:2020-11-24 19:13:13
【问题描述】:

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

R NMF 包包含许多算法,但没有一个算法在计算时间方面令人印象深刻。

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

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

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

R 中是否有与scikit-learn 等价的词?见this question

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

【问题讨论】:

    标签: r nmf


    【解决方案1】:

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

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

    install.packages("RcppML")
    
    # for the development version
    devtools::install_github("zdebruine/RcppML")
    
    ?RcppML::nmf
    

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

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

    【讨论】:

    • 非常好 - 效果很好!
    猜你喜欢
    • 2017-12-05
    • 2015-04-08
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多