matlab简单实验之二维数据降维

  • 实验目的

1. 通过实验操作进一步掌握主成分分析算法;

2. 掌握协方差矩阵及其计算;

3. 学会 Matlab 进行模式识别算法编写。

  • 实验原理

1. 随机生成一组类似于椭圆形 2 维数据(或使用课程资料中的

pcaData.txt 数据)pcaData.txt下载链接提取码:ayfm。

并显示;其数据其实是一个2*45的矩阵。

在二维坐标里显示是近似以个三点椭圆形。

2. PCA 算法实现;计算出特征向量,并在原数据中标出方向;

3. 实现一个 PCA 算法用于降维(将 2 维数据投影到 1 维上)。

  • 实验内容

1:输入数据

matlab简单实验之二维数据降维_第1张图片

 

2:求出协方差

matlab简单实验之二维数据降维_第2张图片

3:降维

matlab简单实验之二维数据降维_第3张图片

 

4:

matlab简单实验之二维数据降维_第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);







 

 

  • 心得体会

要理解降维的过程和代码的实现,课前要先预习好,把思路理一遍,就可以很好的去做。

你可能感兴趣的:(matlab,算法,矩阵)