使用Matlab编程实现PCA和白化变换

使用Matlab完成以下实验,编程实现PCA和白化变换,可以使用eig或svd函数,但不能使用可以直接完成本任务的函数(例如princomp)。
(1)使用x=randn(2000,2)*[2 1;1 2]生成2000个样本,每个样本都是二维的,使用scatter函数画出这2000个样本。
(2)对这些样本进行PCA变换并保留所有2个维度,使用scatter函数画出PCA后的样本。
(3)对这些样本进行白化变换并保留所有的2个维度,使用scatter函数画出PCA后的样本。

clear
x=randn(2000,2)*[2 1;1 2]; %产生标准正态分布的随机数或矩阵
figure(1);
scatter(x(:,1),x(:,2));
xlim([-10,10]);
ylim([-10,10]);
%%
[row,col]=size(x);
c=cov(x); %求矩阵x的协方差矩阵
[F,V]=eigs(c); %V为6个最大特征值对角阵,F的列向量为对应特征向量
meanx=mean(x); %求矩阵每列的平均值
tempx=repmat(meanx,row,1); %堆叠矩阵
score=(x-tempx)*F;
pca=score(:,1:2); %取第12列
figure(2)
scatter(pca(:,1),pca(:,2));
xlim([-10,10]);
ylim([-10,10]);
%%
v=V^(-0.5);
score_whitening=(x-tempx)*(F*v);
whitening=score_whitening(:,1:2); %取第12列
figure(3)
scatter(whitening(:,1),whitening(:,2));
xlim([-5,4]);
ylim([-4,4]);

使用Matlab编程实现PCA和白化变换_第1张图片
使用Matlab编程实现PCA和白化变换_第2张图片
使用Matlab编程实现PCA和白化变换_第3张图片
如果感觉不错,那就给我点个赞吧(ノ ̄▽ ̄)

你可能感兴趣的:(模式识别,matlab,pca降维)