在R中的大密集矩阵上进行PCA的最快方法是什么?

时间:2017-11-14 00:18:04

标签: r performance pca

问题在标题中。

我正在使用大约10K-100K x 1K-10K的密集矩阵,并且需要PCA来减少维数。我通常想要捕获约95%的方差。在我的数据中,我通常会得到大约1/3的组件 - 数据不仅仅是密集的,冗余级别只是适中的。

带有prcomp的PCA在较高维度和/或较大N时非常缓慢。但我没有看到明显的前进方式,因为prcomp的{​​{3}}非常简单 - 它基本上只是在调用svd时进行内务管理。并且可能svd已经过大量优化。

我已经尝试过这个包irlba,但由于某种原因它比prcomp慢 - 可能与我的数据集有关。

只是为了好玩,这是一个简单的例子:

library(MASS)    
N <- 10
p <- 2
out <- c()
haventHitControlCYet <- TRUE
i <- 0
while(haventHitControlCYet == TRUE) {
    i <- i+1
    N <- N*2
    p <- p*2
    C <- matrix(rnorm(p^2), p)
    covmat <- crossprod(C)
    X <- mvrnorm(N, rep(0, p), covmat)
    PT <- proc.time()
    pca <- prcomp(X, center = T, scale. = T)
    out[i] <- (proc.time() - PT)[3]
    plot(out, type = "b")
}

当数据大小加倍时,计算时间 - 超过双倍。

source code

提出这个问题是因为谷歌搜索打开了特定种类数据(基因组学等)的包,我正在寻找一种通用的方法来加速计算密度矩阵的PCA,其中N> p。

感到惊讶的是,这方面还没有一个主题,因为它似乎是一个常见的问题。除非当然已经达到了速度的理论上的严格限制,已经达到了。(?)

0 个答案:

没有答案