懒得说了,直接放代码
%输入你的数据data
data=zscore(data)%进行数据归一化
a=size(data,1);
b=size(data,2);
% %计算相关系数矩阵的特征值和特征向量
CM=corrcoef(data);%计算相关系数矩阵
[V,D]=eig(CM);%计算特征值和特征向量
[DS,ind]=sort(diag(D),"descend");
VS=V(:,ind);
for i=1:b
DS(i,2)=DS(i,1)/sum(DS(:,1));%贡献率
DS(i,3)=sum(DS(1:i,1))/sum(DS(:,1));%累计贡献率
end
% % 选择主成分及对应的特征向量
for k=1:b
if DS(k,3)>=T
Com_num=k;
break;
end
end
%提取主成分对应的特征向量
for j=1:Com_num
PV(:,j)=VS(:,j);
end
% % 计算各评价对象的主成分得分
new_score=data*PV;
no=(1:a)';
result_report=[no,new_score];%将各主成分得分与总分放在同一个矩阵中
disp(result_report)