主成分分析和层次分析法应该是建模比赛中最常用的几个方法之一了
下面的代码我没记错应该是摘自司守奎老师的建模书,然后加上的注释
matlab程序
clc,clear
sj=xlsread('20.xlsx','Sheet2'); %取得数据
sj=zscore(sj); %数据标准化
corr=corrcoef(sj); %计算相关系数矩阵
%利用相关系数矩阵进行主成分分析,x的列为corr的特征向量,及主成分的系数
[x,y,z]=pcacov(corr); %;y为r的特征值,z为各个主成分的贡献率
contr=cumsum(z)%计算累计贡献率
f=repmat(sign(sum(x)),size(x,1),1); %构造与x同维数的元素为±1矩阵
x=x.*f; %修改特征向量的正负号,每个特征向量乘以所有分量和的符号函数值
num=3; %选取的主成分个数
df=sj*x(:,[1:num]); %计算各个主成分的得分
sdf=df*z(1:num)/100 ; %计算综合得分
[stf,ind]=sort(sdf,'descend');%sort排序函数,descend降序
stf=stf',ind=ind'%显示得分和排名
xlswrite('20.xlsx',stf,'Sheet3');
%xlswrite('文件名.xlsx',[stf(1,:);ind(1,:);stf(2,:);ind(2,:);stf(3,:);ind(3,:);],'b1:h8')