PCA步骤:
(1)对原始数据进行标准化处理
(2)计算样本相关系数矩阵
(3)计算相关系数矩阵R的特征值和相应的特征向量
(4)选择重要的主成分,写出主成分表达式
下例中企业综合实力排序问题,其中各列分别为:企业序号;净利润率;固定资产利润率;总产值利润率;销售收入利润率;产品成本利润率;物耗利润率;人均利润;流动资金
x =
1.0000 40.4000 24.7000 7.2000 6.1000 8.3000 8.7000 2.4420 20.0000
2.0000 25.0000 12.7000 11.2000 11.0000 12.9000 20.2000 3.5420 9.1000
3.0000 13.2000 3.3000 3.9000 4.3000 4.4000 5.5000 0.5780 3.6000
4.0000 22.3000 6.7000 5.6000 3.7000 6.0000 7.4000 0.1760 7.3000
5.0000 34.3000 11.8000 7.1000 7.1000 8.0000 8.9000 1.7260 27.5000
6.0000 35.6000 12.5000 16.4000 16.7000 22.8000 29.3000 3.0170 26.6000
7.0000 22.0000 7.8000 9.9000 10.2000 12.6000 17.6000 0.8470 10.6000
8.0000 48.4000 13.4000 10.9000 9.9000 10.9000 13.9000 1.7720 17.8000
9.0000 40.6000 19.1000 19.8000 19.0000 29.7000 39.6000 2.4490 35.8000
10.0000 24.8000 8.0000 9.8000 8.9000 11.9000 16.2000 0.7890 13.7000
11.0000 12.5000 9.7000 4.2000 4.2000 4.6000 6.5000 0.8740 3.9000
12.0000 1.8000 0.6000 0.7000 0.7000 0.8000 1.1000 0.0560 1.0000
13.0000 32.3000 13.9000 9.4000 8.3000 9.8000 13.3000 2.1260 17.1000
14.0000 38.5000 9.1000 11.3000 9.5000 12.2000 16.4000 1.3270 11.6000
15.0000 26.2000 10.1000 5.6000 15.6000 7.7000 30.1000 0.1260 25.9000
>> A=x;
>> a=size(A,1);%获得矩阵A的行大小
b=size(A,2);%获得矩阵A的列大小
for i=1:b
SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i));%std函数是用来求向量的标准差
end
% %计算相关系数矩阵的特征值和特征向量
CM=corrcoef(SA);%计算相关系数矩阵
[V,D]=eig(CM);%计算特征值和特征向量
for j=1:b
DS(j,1)=D(b+1-j,b+1-j);%对特征值按降序排列
end
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
% % 选择主成分及对应的特征向量
T=0.9;%主成分信息保留率
for k=1:b
if DS(k,3)>=T
Com_num=k;
break;
end
end
%提取主成分对应的特征向量
for j=1:Com_num
PV(:,j)=V(:,b+1-j);
end
% % 计算各评价对象的主成分得分
new_score=SA*PV;
for i=1:a
total_score(i,1)=sum(new_score(i,:));
total_score(i,2)=i;
end
result_report=[new_score,total_score];%将各主成分得分与总分放在同一个矩阵中
result_report=sortrows(result_report,-4);%按总分降序排序
% % 输出模型及结果报告
disp('特征值及其贡献率,累加贡献率:')
DS
disp('信息保留率T对应的主成分数与特征向量:')
Com_num
PV
disp('主成分得分及排序(按第四列的总分进行排序,前三列为个主成分得分,第五列为企业编号)')
result_report