【问题标题】:Feature Extraction for MNIST Images Using PCA使用 PCA 对 MNIST 图像进行特征提取
【发布时间】:2014-03-05 15:14:53
【问题描述】:

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

假设我的二维数组的名称是 IMGS,Matlab 表达式:IMGS(:, 1),会给我第一张图像。

为了进行PCA,所以要提取图像的一些特征(从其中的784个中):

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

    我的问题是这样的(这可能有点微不足道,但我想确定这一点): 假设我想从全部 784 个特征中提取 100 个特征,我只需要前 100 列 SCORES?

    所以,在 Matlab 中,我只需要写:IMGS_PCA = IMGS(:, 100)' 我将创建一个 100x1000 的数组,称为 IMGS_PCA,它将在其列中保存我的 1000 个 MNIST 图像,并在其行中保存它们的前 100 个最重要的特征?

【问题讨论】:

    标签: matlab machine-learning pca


    【解决方案1】:

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

    为了说明你的过程,

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

    为了证明函数的使用是正确的,可以尝试恢复原图,

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

    然后IMGS - recovered_IMGS 会给你零矩阵(在数值误差范围内)。

    要仅使用前 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 数组来实现相同的结果。

    【讨论】:

      猜你喜欢
      • 2019-08-22
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 2020-08-06
      相关资源
      最近更新 更多