版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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坐标,画散点图