PCA相信大家都很熟悉,但是苦于网上的代码资料良莠不齐。我在自己写了,并且验证过代码的可行性之后,贴出来给大家分享。有什么问题可以大家交流一下。由于初次使用csdn,公式原理太复杂我就不打了(懒),大家可以自己看资料。实际上看了我的可视化之后,大家也能直观地了解PCA的思想了,直接上代码。

代码如下:

PCA主成分分析的matlab实现以及可视化

PCA主成分分析的matlab实现以及可视化

为防止乱码,下面贴入无注释版

PCA_test.m

X_origin=randn(2000,2);

figure(1);

scatter(X_origin(:,1),X_origin(:,2),3);

X=(X_origin+100*ones(2000,2))*[2 1;1 2];

figure(2);

scatter(X(:,1),X(:,2),3);

[X_PCA]=PCA_mainfunction(X,1);

figure(3);

scatter(X_PCA(:,1),X_PCA(:,2),3);

 

function[X_PCA]=PCA_mainfunction(X,T)

n=size(X,1);

X_mean=1/n.*(X'*ones(n,1));

H=(eye(n)-(ones(n,n)));

S=1/n.*X'*H*X;

[V,D]=eig(S);

for i=1:size(X,2)

    V(i)=V(i)/norm(V(i));

end

X_PCA=(X-ones(n,1)*X_mean')*V(:,1:T)*V(:,1:T)';

end

 

在用于实际任务时,X可直接用实际数据。这里用随机数据只为展示需要。另外,红色部分的*V(:,1:T)'也需要去掉。这个也是为了直观展示而进行的坐标转换,实际工程中不需要。

效果:

(1)原始随机数据(X_origin=randn(2000,2)

PCA主成分分析的matlab实现以及可视化

经过偏移以及转置后的数据(X=(X_origin+100*ones(2000,2))*[2 1;1 2];

PCA主成分分析的matlab实现以及可视化

(2)经过降维后的数据,为直观展现效果用二维图像来表示

PCA主成分分析的matlab实现以及可视化

(3)如果保留所有的两个维度的话

PCA主成分分析的matlab实现以及可视化

直观来看,就是投影到了如图所示的两个方向

PCA主成分分析的matlab实现以及可视化

如果去掉上一幅图的坐标的投影,我们就可以得到这样一幅坐标变换后的散点图。实际上PCA的含义就是特征空间的重构,而这个重构的标准是使得重构后的样本具有最大的方差,直观来说,就是数据要尽量“散”地分布在特征空间里。可以看到,这一幅图是与最原始的随机数据样本是很相像的。当方差大了,样本点在特征空间里的距离也就越大,这很有利于我们对样本进行分类,这也是PCA的另外一个意义。

 

相关文章:

  • 2022-12-23
  • 2021-12-26
  • 2021-12-26
  • 2021-12-04
  • 2021-06-15
  • 2022-12-23
  • 2021-05-31
猜你喜欢
  • 2022-12-23
  • 2021-09-05
  • 2021-05-25
  • 2021-11-23
  • 2021-11-12
  • 2022-12-23
  • 2021-08-09
相关资源
相似解决方案