- 实验目的
1. 通过实验操作进一步掌握主成分分析算法;
2. 掌握协方差矩阵及其计算;
3. 学会 Matlab 进行模式识别算法编写。
- 实验原理
1. 随机生成一组类似于椭圆形 2 维数据(或使用课程资料中的
pcaData.txt 数据)pcaData.txt下载链接提取码:ayfm。
并显示;其数据其实是一个2*45的矩阵。
在二维坐标里显示是近似以个三点椭圆形。
2. PCA 算法实现;计算出特征向量,并在原数据中标出方向;
3. 实现一个 PCA 算法用于降维(将 2 维数据投影到 1 维上)。
- 实验内容
1:输入数据
2:求出协方差
3:降维
4:
最终整体代码:
clc;clear all;
X=load('pcaData.txt');
x = X(1,:);
y = X(2,:);
axis equal;
hold on;
[d, n] = size(X);%求出矩阵X的列数n
B= mean(X,2); %B为X的每一行的均值,共俩行,为一个俩行一列的向量
for j=1:45
X(:,j)=X(:,j)-B;%求出减去均值后的矩阵并赋予新值
end
S=(1/n).*X*(X'); %S为协方差
[u,s,v]=svd(S);
% D_r=sum(D);%求出特征值所在列的总和
% D_max=max(D_r); %求出所有列中,最大的特征值
% [L,R]=find(D==D_max); %求出最大特征值在D里的下标,以便找到对应的特征向量。
k=1;
U=u(:,k); %前k个大的特征向量赋予U;
k_U=U'; %转置
plot([0 u(1,1)],[0 u(2,1)],'b');
plot([0 u(1,2)],[0 u(2,2)],'b');
Y =(k_U)*X; %Y为降维后的矩阵
cos=U(1,1)/norm(U);
sin=U(2,1)/norm(U);
scatter(X(1,:),X(2,:),'g');
scatter(Y.*cos,Y.*sin);
- 心得体会
要理解降维的过程和代码的实现,课前要先预习好,把思路理一遍,就可以很好的去做。