基于PCA的MNIST图像特征提取



我使用Matlab读取MNIST数据库。这些图像最初是28x28(=784)个像素。因此,我有一个2D 784x1000阵列(意思是,我已经读取了1000张图像)。

假设我的2D阵列的名称是IMGS,那么Matlab表达式:IMGS(:,1)将为我提供第一个图像。

为了执行PCA,从而提取图像的一些特征(从784个特征中):

  1. 我在一个名为IMGS_T的数组中转置数组IMGS,将图像放在行中,将特征(维度)放在列中(IMGS_T(1,:)对应于第一个图像)
  2. 我使用的princomp函数如下:[COFF,SCORES]=princomp(IMGS_T];

    我的问题是(这可能有点琐碎,但我想确定一下):假设我想从784个特征中提取100个特征,我只需要分数的前100列?

    因此,在Matlab中,我只需要写:IMGS_PCA=IMGS(:,100)'我将创建一个100x1000阵列,称为IMGS_PCA,它将在其列中保存我的1000个MNIST图像,并在其行中保存它们的前100个最重要的功能?

基本上是正确的。请注意,在princomp中,输入的行对应于观测值,列对应于变量。

为了说明您的程序,

IMGS = rand(1000,784);
[COEFF, SCORE] = princomp(IMGS);

为了证明功能的使用是正确的,你可以尝试恢复原始图像,

recovered_IMGS = SCORE / COEFF + repmat(mean(IMGS,1), 1000, 1);

则CCD_ 2将给出零矩阵(在数值误差内)。

要只使用前100个功能,您可以只使用

for i=101:784
SCORE(:,i) = zeros(1000,1);
end

然后使用相同的代码来恢复图像:

recovered_IMGS_100 = SCORE / COEFF + repmat(mean(IMGS,1), 1000, 1);

或者,正如您所提到的,您可以创建另一个100 x 1000的阵列来获得相同的结果。

相关内容

  • 没有找到相关文章

最新更新