gpt4 book ai didi

matlab - 使用 PCA 提取 MNIST 图像的特征

转载 作者:行者123 更新时间:2023-11-30 09:38:15 29 4
gpt4 key购买 nike

我使用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)'我将创建一个名为 IMGS_PCA 的 100x1000 数组,该数组将在其列中保存我的 1000 张 MNIST 图像,并在其行中保存它们的前 100 个最重要的特征?

最佳答案

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

为了说明您的程序,

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

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

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

然后 IMGS - returned_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 数组来实现相同的结果。

关于matlab - 使用 PCA 提取 MNIST 图像的特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21640801/

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