主成分分析之matlab实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44719615/article/details/102468813
L = {'1','2','3','4','5','6','7','8','9','10'}%每个变量代表的意思,后面的散点图会用到
x=zscore(v)                           %数据标准化
[coef,score,eig,t]=princomp(x);   %matlab自带的princomp函数进行主成分分析
s=0;
i=1;
while s/sum(eig)<0.95
    s=s+eig(i);
    i=i+1;
end                                     %获得累积贡献率达到0.95的矩阵。
NEW=x*coef(:,1:i-1)                 
figure
pareto(eig/sum(eig));                
figure(2);
plot(eig,'r+');
hold on 
plot(eig,'b-');
a = coef(:,1);
b = coef(:,2);
figure(3);
scatter3(a,b,c,'k');                       %主成分1,2,3的三维散点图
for i = 1:11
text(a(i)+0.05,b(i)+0.05,c(i)+0.05,L{i});   %散点图的点与标签的位置设置
end
xlabel('PC1');
ylabel('PC2');
zlabel('PC3')

代码如上所示,另附上本人学习过程中对于主成分分析的笔记

1.输入矩阵v为m*n的矩阵,m是样本数,n是维度。

 2.Coef矩阵中每一列代表一个主成分的系数,第一列是第一主成分,每一列的每一行代表维度(变量例如大小、尺寸、面积等)的系数。

3.最后的散点图可用coef矩阵中前2列,表排名前2的成分,以第一主成分的每一行为x坐标,第二主成分的每一行为y坐标,画散点图

 

猜你喜欢

转载自blog.csdn.net/weixin_44719615/article/details/102468813