使用 pca 崩溃 Matlab
Posted
技术标签:
【中文标题】使用 pca 崩溃 Matlab【英文标题】:Using pca Crashes Matlab 【发布时间】:2015-05-14 04:18:06 【问题描述】:对于这个问题,我不明白为什么每次运行我的 pca 行时我的 MATLAB 都会崩溃。我在包含异常面的矩阵上使用 pca,如下所述:
pics.mat 包含 40 张图像的矩阵数据,每张图像的尺寸为 96*64 像素。 (一个96*64*40的矩阵)
我这部分的代码是:
%% problem 1a: finding average face
load('pics.mat'); % loads the file
% combines the 3d matrix into a 2d matrix
total = [pics(:, :, 1)];
for i = 2:40
total = [total + pics(:, :, i)];
end
size(total) %96 by 64
A1 = total/40 % the average values divided by total # of faces for avg face
%% problem 1b: the anomalous face
Anom = [];
for i = 1:40
Anom(:, :, i) = [pics(:, :, i) - A1]; % subtract the average face from all 40 images
end
我遇到的问题是,当我执行涉及在 b 部分的 40 个异常面孔上使用 pca 的这一部分时,我的 MATLAB 崩溃了。
我这部分的代码是:
%% problem 1c I: pca
Anom = reshape(Anom, [6144 40]); % reshapes a 3d into 2d
[eigenfaces,scores,sigma2] = pca(Anom', 'Centered' ,'off'); % this crashes MATLAB
为什么会崩溃?是因为我前面部分的代码,还是因为我在一台极度贫血的笔记本电脑上运行它?
【问题讨论】:
它是 64 位操作系统吗?如果没有,您可能需要在崩溃后立即检查 matlab.exe 的内存消耗 - 即使从任务管理器中也是如此。 很可能你有一台“弱”的计算机,代码对于 Matlab 来说太多了。 Matlab 通常不会因为代码中的错误而崩溃。 是的,我在 Windows 8 64 位上运行它。这可能是记忆;我在一个小得多的矩阵上尝试了 pca,它可以工作。 【参考方案1】:我有一个类似的问题,维度使计算变得不堪重负。 This link of Cootes Active Shape Models,在附录 C 中,他将他的 D 转换为 T 以应对矩阵维数。
我希望它也适用于你的情况,因为它让我免于很多麻烦。
这就是我在 MatLab 中解决它的方法:
imvecs = 图像向量
meanval = 他们的平均值
size(imvecs,2) = 我的数据集中的图片数量(N)
function [T, D] = covarianceMatrix(imvecs, meanval)
D = [];
for i = 1:size(imvecs,2),
diff = imvecsi - meanval;
D = [D, diff];
end
%Dimensionality reduction
T = (D' * D) ./ (size(imvecs,2));
return
T 现在是一个 NxN 大小的矩阵,希望它更容易计算而不会耗尽内存。
祝你好运!
【讨论】:
以上是关于使用 pca 崩溃 Matlab的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MATLAB 中使用 pca 函数来选择有效的特征? [复制]
使用 matlab 和 R 计算数据集的 PCA,但每个组件的方差不同