gpt4 book ai didi

MATLAB 内存不足,但不应如此

转载 作者:IT王子 更新时间:2023-10-28 23:33:49 26 4
gpt4 key购买 nike

我正在申请 PCA在我的数据上使用 princomp(x) ,已经标准化了。

数据是<16 x 1036800 double> .这运行了我们的内存,这也是意料之中的,除了这是一台新计算机,这台计算机拥有 24GB 的 RAM 用于数据挖掘。 MATLAB 甚至会在内存检查中列出可用的 24GB。

MATLAB 在执行 PCA 时实际上是否内存不足,或者 MATLAB 是否没有充分利用 RAM?任何信息或想法都会有所帮助。 (我可能需要增加虚拟内存,但假设 24GB 就足够了。)

最佳答案

对于大小为 n×p 的数据矩阵,PRINCOMP将返回一个大小为 p×p 的系数矩阵,其中每列是使用原始维度表示的主成分,因此在您的情况下,您将创建一个大小为:

1036800*1036800*8 bytes ~ 7.8 TB

考虑使用 PRINCOMP(X,'econ')只返回具有显着差异的 PC

或者,考虑执行PCA by SVD : 在你的情况下 n<<p ,并且协方差矩阵是不可能计算的。因此,不要分解 p-by-p 矩阵 XX' ,仅分解较小的 n×n 矩阵 X'X 就足够了.引用 this paper供引用。


编辑:

这是我的实现,此函数的输出与 PRINCOMP 的输出匹配(无论如何都是前三个):

function [PC,Y,varPC] = pca_by_svd(X)
% PCA_BY_SVD
% X data matrix of size n-by-p where n<<p
% PC columns are first n principal components
% Y data projected on those PCs
% varPC variance along the PCs
%

X0 = bsxfun(@minus, X, mean(X,1)); % shift data to zero-mean
[U,S,PC] = svd(X0,'econ'); % SVD decomposition
Y = X0*PC; % project X on PC
varPC = diag(S'*S)' / (size(X,1)-1); % variance explained
end

我刚刚在我的 4GB 机器上试了一下,它运行得很好:

» x = rand(16,1036800);
» [PC, Y, varPC] = pca_by_svd(x);
» whos
Name Size Bytes Class Attributes

PC 1036800x16 132710400 double
Y 16x16 2048 double
varPC 1x16 128 double
x 16x1036800 132710400 double

更新:

princomp函数被弃用,取而代之的是 pca 在 R2012b 中引入,其中包括更多选项。

关于MATLAB 内存不足,但不应如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3181593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com