MatlabのPCA次元削減-例としてMnistの手書きデータを取り上げます

MatlabのPCA次元削減-例としてMnistの手書きデータを取り上げます

1.参考記事

主成分分析(PCA)の原理を詳細に説明
主成分分析pca(Matlab pca関数パラメーターの説明)

2. Baiduクラウドのダウンロード(コード+データ)

PCA共有
リンク:https
://pan.baidu.com/s/1Bmfb7rLANU4D1T4q_GEu0A抽出コード:4xoh

3.実際の操作

1.データをインポートします

%%
%导入原始数据 放在了E盘
mnist_raw = csvread('E:/by/mnist_train.csv');
%原始数据维度为60000*785,第一列为标签信息 
%譬如第一个为"5"则这个图片是手写的"5"

imgs = mnist_raw(1:1000,2:end);  %选取1000个样本,并去除标签列
imgs = im2double(imgs);

figure(1) %1显示前50幅图像
for i = 1:50
    subplot(5, 10, i);
    imshow(reshape(imgs(i, :), 28, 28));%28x28=784 共有784%imshow(reshape(imgs(i, :), 40, 40));这样子是错误的
end

図1を下図に示します。各写真は28 * 28ピクセルで構成されており、データの「0」は黒い領域です。データの最初の列のラベル値から、最初の行を知ることができます。の数は5、0、4、1、9、2、1、3、1、4です。
ここに画像の説明を挿入

2.PCAデータの視覚化

pca()関数の詳細な説明については、上記のリンクを参照してください。この部分は最も重要で理解が困難です。pcaの原理をある程度理解している必要があります。

%%
%对数据imgs进行PCA降维
[coeff,score,latent] = pca(double(imgs));
% coeff的每一列是样本协方差矩阵的特征向量(主成分分量);
%score第i行前n个数值代表着样本i降到n维的结果;
% latent从大到小保存了样本协方差矩阵所有的特征值

% 取前两维,并可视化如下:
figure(2)
plot(score(1:10, 1), score(1:10, 2), 'r*');
hold on;
plot(score(11:20, 1), score(11:20, 2), 'g*');
hold on;
plot(score(21:30, 1), score(21:30, 2), 'b*');
hold on;
plot(score(31:40, 1), score(31:40, 2), 'go');
hold on;
plot(score(41:50, 1), score(41:50, 2), 'ro');
hold on;

ここでは、なぜ描画がこのように行われるのか理解できませんでした。10個のサンプルデータごとに2次元に縮小され(描画を描画するために2次元に縮小され)、異なる色でペイントされるため、同じ色がカテゴリになります。
ここに画像の説明を挿入
次に、最初の3次元を取得し、plot3()関数を使用して3次元画像を作成しました。同じ色は同じ「カテゴリ」を表していません(次回は先生に聞いてください)。赤い円は最初の10個だけを表します。サンプル。
ここに画像の説明を挿入

3.「機能」を視覚化する

係数は784 * 784ダブルです

% 可视化“特征”,主成分分量coeff的每一列可以构造一个“特征”,对这些特征可视化如下:
figure(3)
for i=1:25
    subplot(5, 5, i);
    imshow(1.0 - reshape(coeff(:, i), 28, 28));
end

ここに画像の説明を挿入

4.イメージを再構築します

% score第i行前n个数值代表着样本i降到n维的结果。
%score第i行的第j个数值代表着第j个“特征”在原图像i中的权重。这些权值有正有负。
% 据此,可以重构图像。下面以第二张图像为例。
% 计算样本均值
base_img =  mean(imgs);
img = base_img';
%使用前10个特征重建第二幅图像
for i = 1:10
    img = img + coeff(:, i).*score(2, i);
end
% 显示重建的图像和原始图像,进行比较
figure(4)
subplot(2,1,1);
imshow(reshape(img, 28, 28));
subplot(2,1,2);
imshow(reshape(imgs(2,:), 28, 28));

ここに画像の説明を挿入

4.経験

アルゴリズムの原則は依然としてコアです。コードとデータは、すべての人がより抽象的なPCAの原則を消化するためのものです。記述は十分ではありません。もっとコミュニケーションできることを願っています(大きな笑顔)

おすすめ

転載: blog.csdn.net/weixin_45734379/article/details/109956384
おすすめ