Matlab实现主成分分析

找了十家公司的财务报表,从中选取了十个财务指标进行PCA分析。数据如下:

 matlab代码如下:

clear;
clc;
%%导入数据
A = xlsread('D:/matlab_script/十家公司.xlsx','C2:L11');
%%数据标准化
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);    %计算特征值(D)和特征向量(V)
%计算出来的特征值是按升序排序的
for j = 1:b
    DS(j,1) = D(b+1-j,b+1-j);   %按降序排序
end
s = sum(DS(:,1));
for i = 1:b
    DS(i,2) = DS(i,1)/s;    %贡献率
    DS(i,3) = sum(DS(1:i,1))/s; %累积贡献率
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

%% 输出模型结果
disp('特征值及其贡献率、累计贡献率:')
DS
disp('信息保留率T对应的主成分与特征向量:')
Com_num
PV

小白自学!主要想记录自己写的代码,如有错误或其他方法请大佬指出。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值