资源简介

CroppedYale人脸数据降维的MATLAB代码,使用PCA,SVD和MATLAB自带的PCA对比时间、准确度,可以直接运行。对比中心化给PCA带来的影响;对比PCA与SVD的异同;选取合适的维度k,并观察k个特征向量对应的图像;对比自己实现的PCA算法与matlab自带的PCA函数的性能

资源截图

代码片段和文件信息

clear;
clc;
% 加载文件
load(‘./CroppedYale/Yale_64x64.mat‘);
% 原样本矩阵A:165*1024
A = fea;
tic
%% 1. Centralization
m = size(A1);  % A的行数
n = size(A2);  % A的列数
meanA = mean(A);    % 求每一列的均值
repmatA = repmat(meanA m 1);
X = A - repmatA;    % 样本减去均值,做中心化,X:165*4096
% X = A; % 不用中心化

%% 2. Covariance Matrix
C = X‘ * X./(m-1);  % 求协方差矩阵C:4096*4096

%% 3. Eigenvalue Decomposition
% 协方差矩阵C的特征向量,也称特征脸,每一维为一个特征脸
[U D] = eig(C);    % 特征向量U:4096*4096; 特征值D:4096*4096
% 按特征值大小排序
grad = sum(D2); % D为对角矩阵,每个元素为相应的特征值,为方便后续处理,这里将特征值放到一个列向量
[sortGrad index] = sort(grad ‘descend‘); % 排序
U = U(: index);    % 将对应的特征向量降序排列

k= 1;
% 计算各行累加值所占比例
arr = cumsum(sortGrad) ./ sum(sortGrad);
while ( arr(k 1) <= 0.95 )
    k = k + 1;
end

U = U(: 1:k);  % 提取前k个特征向量

%% 4. Feature Matrix
% 降维后的矩阵
Y = X * U;  % 将样本转化到低维空间,对样本进行降维
toc
%% 5. 还原矩阵
A_re = Y * pinv(U) + repmatA;

%% 6. 显示特征脸
%===========================================
faceW = 64; 
faceH = 64; 
numPerLine = 11; 
ShowLine = 5; 
figure
Y = zeros(faceH*ShowLinefaceW*numPerLine); 
% 显示特征脸
% for i=0:ShowLine-1 
%    for j=0:numPerLine-1 
%      Y(i*faceH+1:(i+1)*faceHj*faceW+1:(j+1)*faceW) = reshape(U(:i*numPerLine+j+1)[faceHfaceW]); 
%    end 
% end 
% 显示降维后的人脸
for i=0:ShowLine-1 
   for j=0:numPerLine-1 
     Y(i*faceH+1:(i+1)*faceHj*faceW+1:(j+1)*faceW) = reshape(A_re(i*numPerLine+j+1:)[faceHfaceW]); 
   end 
end 
imagesc(Y);colormap(gray);
%===========================================

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-04-30 11:39  CroppedYale人脸数据降维\
     目录           0  2017-04-30 11:39  CroppedYale人脸数据降维\CroppedYale\
     文件      161026  2017-04-04 15:11  CroppedYale人脸数据降维\CroppedYale\Yale_32x32.mat
     文件      641318  2017-04-04 15:11  CroppedYale人脸数据降维\CroppedYale\Yale_64x64.mat
     文件        1721  2017-04-09 12:44  CroppedYale人脸数据降维\PCA.m
     文件        1294  2017-04-09 12:48  CroppedYale人脸数据降维\PCAinMATLAB.m
     文件        1211  2017-04-09 12:47  CroppedYale人脸数据降维\SVD.m

评论

共有 条评论