r - 计算R中前两个主成分的最快方法是什么?

标签 r pca eigenvector eigenvalue

我在R中使用princomp执行PCA。我的数据矩阵很大(10K x 10K,每个值最多4个小数点)。在Xeon 2.27 GHz处理器上需要约3.5个小时和约6.5 GB的物理内存。

由于我只想要前两个组件,因此有没有更快的方法?

更新:

除了速度之外,还有没有一种内存有效的方法可以做到这一点?

使用svd(,2,)来计算前两个组件大约需要2个小时和6.3 GB的物理内存。

最佳答案

有时您可以使用所谓的“经济”分解,从而可以限制特征值/特征向量的数量。看起来eigen()prcomp()不提供此功能,但是svd()允许您指定要计算的最大数量。

在小型矩阵上,增益似乎不大:

R> set.seed(42); N <- 10; M <- matrix(rnorm(N*N), N, N)
R> library(rbenchmark)
R> benchmark(eigen(M), svd(M,2,0), prcomp(M), princomp(M), order="relative")
          test replications elapsed relative user.self sys.self user.child
2 svd(M, 2, 0)          100   0.021  1.00000      0.02        0          0
3    prcomp(M)          100   0.043  2.04762      0.04        0          0
1     eigen(M)          100   0.050  2.38095      0.05        0          0
4  princomp(M)          100   0.065  3.09524      0.06        0          0
R> 


但是从princomp()重构princomp()时,相对于svd()的3倍可能值得,因为svd()允许您在两个值之后停止。

关于r - 计算R中前两个主成分的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8299460/

相关文章:

r - 为回归方程选择合适的滞后以及如何解释 VARselect 的结果

MATLAB eigs 返回非常奇怪的结果

image - 如何使用通过PCA获得的特征向量来重新投影我的数据?

r - 从一个字符字段中提取多个值到一个新的数据表中

r - 使用 reshape on 多次 =""变量?

python - 如何在 Rmarkdown 文档中显示来自 Python 代码的几何对象?

c++ - 在 OpenCV 中使用 PCA 进行降维

matlab - 使用PCA输出通过神经网络训练角点特征

r - 使用自动绘图显示非默认主成分 (ggfortify)

c++ - 低 RAM 消耗 C++ 特征求解器