2021年pca_实验报告(含代码、实验流程图结果分析等).docxVIP

  • 46
  • 0
  • 约2.5千字
  • 约 5页
  • 2021-09-09 发布于四川
  • 举报

2021年pca_实验报告(含代码、实验流程图结果分析等).docx

PCA实现人脸识别实验报告 1实验内容 1) 实现PCA算法 2) 用PCA算法对一张照片进行降维重构 3)4) 3) 4) 用PCA算法对120张照片进行训练,然后用同样120个人的照片作为测试 集,计算误差 2实验流程及相关结果 2.1PCA算法的实现 算法的流程 数据集X - 数据集X - 中心化- 计算协方差矩阵 SVD分解- 返回U的前K列 实验代码 function [Z,U] = pea (X, K) X=X;%X:1680*2000 mu = mean(X); Xnorm = bsxfun(@minus, X, mu);%中心化处理 X=X norm; [m, n] = size(X); sigma=l/m*X*X;%计算协方差矩阵 [u,s,v]=svd(sigma);% 奇异值分解 ureduce=u(:,l:K);%ureduce:2000*K Xrec=X*ureduce*ureduce;%Xrec:1680*2000 Z=Xrec;%重构结果 U=ureduce;%特征向量 Endfunction 2.2用PCA实现一张照片降维重构 1)展示一张照片 代码: pkg load image pkg load statistics load AR; AR=double(AR(:,:)); image=AR(:,l); image=reshape(image,50, 40); imshow(mat2gray(image)); 结果: C Figure 1 I。回 注 文件(F) 犒辑(E) 布助(H) ? Z+ Z?小插入又本 Q 轴网格自如融 (12.99, 50.448) / 2)对一张照片进行降维重构 展示重构后的结果 代码 pkg load image pkg load statistics load AR; AR=double(AR(:,:)); [z,u]=pca(AR,50); image=z(:,l); image=reshape(image,50, 40); imshow(mat2gray(image)); 结果 2.3比照手动实现pea和调包实现pea的误差 1)计算重构误差 1)计算重构误差 :€1 公式:本次计算重构误差采用如下公式 代码: pkg load image pkg load statistics load AR; AR=double(AR(:,:)); [z,u]=pca(AR,50); loss=comloss(AR,z) function loss=comloss(X,Y) X=X; mu = mean(X); Xnorm = bsxfun(@minus, X, mu);%归一化处理 X=Xnorm; loss=sum(sum((X-Y).A2))/sum(sum(X.A2)); endfunction 结果: loss = 0.12892 I 2)调用matlab包实现pea算法计算重构误差 代码: load AR; AR=double(AR(:,:)); [z,u]=pca(AR,50); loss=comloss(AR,z) %手动实现pea算法的误差 [zl,u]=autopca(AR,50); lossl=comloss(AR?zl) %调包实现pea算法的误差 function [z,u]=autopca(X,K) [COEFF SCORE latent]=princomp(X); u=SCORE(:,l:K); ureduce=COEFF(:,l:K); x rec=u*ureduce; z=xrec; u=ureduce; endfunction 结果: loss =0.12892lossl = loss = 0.12892 lossl = 0.12892 2.4用pea实现 读取120个人的不同照片作为训练集和测试集 代码 for i=2:14:1680 if i==2 train=AR(:,i); else train=[train AR(:,i)]; end; endfor for i=3:14:1680 if i==3 testdata=AR(:,i); else testdata=[testdata AR(:J)]; end; endfor 用pea实现人脸识别过程 代码: [z,ureduce]=pca(trainzk);%对 120 张人脸照片训练得到特征向量 ureduce 2000*K mu = mean(train); traindata = bsxfun(@minus, train, mu);%中心化处理 train=traindata;%2000*120 mu = mean(testdata); test = bsxfu

文档评论(0)

1亿VIP精品文档

相关文档