主成分分析法PCA——MATLAB实现

发布于 2020-01-16  198 次阅读


1.基本原理

将原来众多具有一定相关性的变量,重新组合为一组新的相互无关的综合变量来代替原来的变量

2.方法步骤

1)对原始数据进行标准化处理

2)计算样本相关系数矩阵

3)计算相关系数矩阵R的特征值和相应的特征向量

4)选择重要的主成分,并写出主成分表达式

5)计算主成分得分

6)依据主成分得分的数据,进一步对问题进行后续的分析和建模(主成分回归、变量子集合的选择、综合评价等)

3.参考代码

%% 数据导入处理
clc
clear all
A = xlsread('/Users/macbookpro/Documents/t3.xlsx','B2:I16');
%% 数据标准化处理
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.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('主成分的分及排序(按第四列的总分进行降序排列,前3列为各主成分得分,第五列为企业编号)')
result_report

原始数据:

运行结果:


子弟二十不狂没志气!!