主成分分析的matlab代码

clc;
clear all;
A=xlsread('C:\Users\d e l l\Documents\MATLAB\problem four\problem two two.xls','C34:AF61');
a=size(A,1);
b=size(A,2);
for i=1:b
    SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i));%%%标准化处理
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.85;
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,-(k+1));
disp('PCA处理的得到各主成分得分及总得分为:');
result_report
%%%%求对应各主成分的系数
cofficient=[];
for i=1:size(A,2)
    sum1=0;
    for j=1:Com_num
    sum1=sum1+PV(i,j)*DS(j,2);
    end
    cofficient(i)=sum1/sum(DS(1:Com_num,2));
end
disp('PCA求得的各主成分的系数为:');
cofficient

其中DS第一列是特征值,第二列是贡献率,第三列是累计贡献率,这里采用累计贡献率大于0.85

PV的列数就是主成分个数,行数就是原来的变量数,最终结果竖着看,每一个主成分F可以表示为多个原变量的关系式,系数为每一列的值.

result_report是主成分得分,然后是总主成分得分(这里值得商榷),最后是排名(对于我的数据来说)。

太累了,身心俱疲,只是写给自己看的,就这样吧。

  • 10
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值