主成分分析步骤及Matlab实例代码

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值