我在寻找一个在R中快速实现稀疏矩阵的NMF方法。
R NMF软件包由许多算法组成,没有一种算法在计算时间上给人留下深刻印象。
NNLM::nnmf()目前在R中似乎是最先进的,特别是method = "scd"和loss = "mse",它们是通过顺序坐标下降求解的交替最小二乘实现的。然而,这种方法在非常大的、非常稀疏的矩阵上是非常慢的。
rsparse::WRMF函数非常快,但这是因为A中只有正数才用于W和H的逐行计算。
在稀疏矩阵上求解NMF是否有合理的实现?
R中是否有与scikit-learn等价的?请参阅this question
有各种各样的工作函数,如fnnls、R中的tsnnls,没有一个超过nnls::nnls (用Fortran编写)。我一直无法将任何这些函数编码到一个更快的NMF框架中。
发布于 2021-08-02 16:49:44
忘了我甚至发了这个问题,但一年后.
我在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万个包含26000个基因的单细胞,在一个96%的稀疏矩阵中,在1分钟内进行秩-100分解。我觉得这很合理。
https://stackoverflow.com/questions/64993328
复制相似问题