PCA(Principal Component Analysis 主成分分析)原理及MATLAB实现

关于PCA的原理参见:

PCA原理

PCA:一种通过特征的线性组合来实现降维的方法,目的就是在尽可能好的代表原始数据的前提下,通过线性变换将样本数据投影到地位空间中。
如图示意,二维样本分别投影到e1、e2上,降维一维数据。
这里写图片描述
MATLAB中使用princomp()函数对PCA进行封装。
一般调用类型:
[COEEF,SCORE,latent]=princomp(Y);
COEEF:为样本协方差矩阵的(标准化后的)特征向量;即变换空间中的基向量:e1、e2、e3...
SCORE:主成分,Y的低维表示,即Y中的数据在主成分分量上的投影;
latent:包含样本协方差矩阵的特征值的向量。
如:

Y=[-1,-2;-1,0;0,0;2,1;0,1];
[COEEF,SCORE,latent]=princomp(Y);

可得
COEEF=
0.7071  0.7071
0.7071  -0.7071

SCORE=
-2.1213  0.7071
-0.7071  -0.7071
 0     0
2.1213   0.7071
0.7071   -0.7071

latent=
2.5
0.5

上述PCA过程主要的计算量是计算样本协方差矩阵的特征值和特征向量。假如有n个d维样本特征向量,则组成的样本矩阵X的大小为n×d,对应的协方差矩阵S的大小为d×d,当维数d很大时会导致PCA计算了很大,会消耗大量内存。
因此需要一种算法减小PCA的计算量——快速PCA

1、奇异值分解(SVD)
SVD的原理及推导过程参见:
奇异值分解详解
知乎话题:奇异值的物理意义是什么

用不同的特征分量,进行重构
clear all;
close all;
clc;

a=imread(‘sophie.jpg’);
a=rgb2gray(a);
[m n]=size(a);
r=rank(double(a));
[s v d]=svd(double(a));

re01=s(:,:)*v(:,1:1)*d(:,1:1)’;
re1=mat2gray(re01);

re02=s(:,:)*v(:,1:3)*d(:,1:3)’;
re2=mat2gray(re02);

re03=s(:,:)*v(:,1:5)*d(:,1:5)’;
re3=mat2gray(re03);

re04=s(:,:)*v(:,1:20)*d(:,1:20)’;
re4=mat2gray(re04);

re05=s(:,:)*v(:,1:40)*d(:,1:40)’;
re5=mat2gray(re05);

figure;
subplot(2,3,1),subimage(a);
title(‘原图’);
subplot(2,3,2),subimage(re1);
title(‘1*1’);
subplot(2,3,3),subimage(re2);
title(‘3*3’);
subplot(2,3,4),subimage(re3);
title(‘5*5’);
subplot(2,3,5),subimage(re4);
title(‘20*20’);
subplot(2,3,6),subimage(re5);
title(‘40*40’);

运行效果如图:
这里写图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值