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中的fnnls
、tsnnls
等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 秩分解。我觉得很有道理。
我正在寻找 R 中稀疏矩阵的快速 NMF 实现。
R NMF
包包含许多算法,none 其中在计算时间方面令人印象深刻。
NNLM::nnmf()
目前在 R 中似乎是最先进的,特别是 method = "scd"
和 loss = "mse"
,实现为通过顺序坐标下降求解的交替最小二乘法。但是,这种方法在非常大、非常稀疏的矩阵上非常慢。
rsparse::WRMF
函数非常快,但这是因为 A
中只有正值用于 W
和 [=17= 的逐行计算].
在稀疏矩阵上求解NMF有什么合理的实现吗?
在 R 中是否有等同于 scikit-learn
的东西?参见
R中的fnnls
、tsnnls
等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 秩分解。我觉得很有道理。