使用 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,但每个组件的方差不同

如何在matlab中使用PCA减少矩阵维数? [复制]

matlab中使用快速pca提取特征

如何使用matlab在K-means算法后绘制具有不同颜色簇的PCA散点图?

Matlab - 多维数据的PCA分析与重构