在R中进行GPU加速PCA是否有助于;fat“;数据矩阵值得付出努力,还是我应该坚持使用标准例程?
我知道R中的princomp使用了由cor确定的相关或协方差矩阵的特征值,prcomp例程基于svd 我也读过,也可以使用QR分解来进行PCA,但我还没有遇到R实现。(如果有人愿意展示它是如何完成的,那就太好了。) 我希望将PCA应用于“fat”数据矩阵(列数大于行数),并想知道这些例程是否可以在R下的GPU(nvidia)例程下进一步优化,最好不用编写自定义C/C++CUDA代码 查看gpuR、gputools和gmatrix包在R中进行GPU加速PCA是否有助于;fat“;数据矩阵值得付出努力,还是我应该坚持使用标准例程?,r,pca,svd,gpu,R,Pca,Svd,Gpu,我知道R中的princomp使用了由cor确定的相关或协方差矩阵的特征值,prcomp例程基于svd 我也读过,也可以使用QR分解来进行PCA,但我还没有遇到R实现。(如果有人愿意展示它是如何完成的,那就太好了。) 我希望将PCA应用于“fat”数据矩阵(列数大于行数),并想知道这些例程是否可以在R下的GPU(nvidia)例程下进一步优化,最好不用编写自定义C/C++CUDA代码 查看gpuR、gputools和gmatrix包 gpuR仅支持对称矩阵的svd和协方差,因为它依赖于OpenC
- gpuR仅支持对称矩阵的svd和协方差,因为它依赖于OpenCL
- gputools仅支持QR,但它具有相关函数,不确定是否将非对称矩阵排除在两者之外
- 似乎只有gmatrix的GPU(带有CUDA)支持SVD和QR分解,而没有明确的对称矩阵要求李>
如果我使用基于GPU(nvidia)的svd和/或qr分解例程对“fat”数据矩阵进行PCA,或者只关注base R提供的标准例程,会有什么好处?回答您的问题的唯一方法是运行基准测试,看看是否值得。如果你有一台设备,我建议你尝试一下,然后在这里报告它们或问题。回答你问题的唯一方法是运行一个基准测试,看看它是否值得。如果您有一台设备,我建议您尝试一下,并在这里报告这些设备或问题。
> princomp(USArrests, cor = TRUE)$loadings
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
Murder -0.536 0.418 -0.341 0.649
Assault -0.583 0.188 -0.268 -0.743
UrbanPop -0.278 -0.873 -0.378 0.134
Rape -0.543 -0.167 0.818
Comp.1 Comp.2 Comp.3 Comp.4
SS loadings 1.00 1.00 1.00 1.00
Proportion Var 0.25 0.25 0.25 0.25
Cumulative Var 0.25 0.50 0.75 1.00
> prcomp(USArrests, scale = TRUE)
Standard deviations:
[1] 1.5748783 0.9948694 0.5971291 0.4164494
Rotation:
PC1 PC2 PC3 PC4
Murder -0.5358995 0.4181809 -0.3412327 0.64922780
Assault -0.5831836 0.1879856 -0.2681484 -0.74340748
UrbanPop -0.2781909 -0.8728062 -0.3780158 0.13387773
Rape -0.5434321 -0.1673186 0.8177779 0.08902432
> svd(cor(USArrests))$u
[,1] [,2] [,3] [,4]
[1,] -0.5358995 0.4181809 -0.3412327 0.64922780
[2,] -0.5831836 0.1879856 -0.2681484 -0.74340748
[3,] -0.2781909 -0.8728062 -0.3780158 0.13387773
[4,] -0.5434321 -0.1673186 0.8177779 0.08902432
> eigen(cor(USArrests))$vectors
[,1] [,2] [,3] [,4]
[1,] -0.5358995 0.4181809 -0.3412327 0.64922780
[2,] -0.5831836 0.1879856 -0.2681484 -0.74340748
[3,] -0.2781909 -0.8728062 -0.3780158 0.13387773
[4,] -0.5434321 -0.1673186 0.8177779 0.08902432