在R中进行GPU加速PCA是否有助于;fat“;数据矩阵值得付出努力,还是我应该坚持使用标准例程?

在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

我知道R中的princomp使用了由cor确定的相关或协方差矩阵的特征值,prcomp例程基于svd

我也读过,也可以使用QR分解来进行PCA,但我还没有遇到R实现。(如果有人愿意展示它是如何完成的,那就太好了。)

我希望将PCA应用于“fat”数据矩阵(列数大于行数),并想知道这些例程是否可以在R下的GPU(nvidia)例程下进一步优化,最好不用编写自定义C/C++CUDA代码

查看gpuR、gputools和gmatrix包

  • 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