我在用princomp
在 R 中执行 PCA。我的数据矩阵很大(10K x 10K,每个值最多 4 位小数)。在 Xeon 2.27 GHz 处理器上大约需要 3.5 小时和大约 6.5 GB 物理内存。
由于我只想要前两个组件,是否有更快的方法来做到这一点?
Update :
除了速度之外,是否有一种内存有效的方法来做到这一点?
使用以下命令计算前两个分量需要约 2 小时和约 6.3 GB 物理内存svd(,2,)
.
有时您可以访问所谓的“经济”分解,它允许您限制特征值/特征向量的数量。看起来像eigen()
and 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()
from svd()
as svd()
允许您在两个值后停止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)