主成分分析法

  • 主成分分析法的评价步骤
  • 自行封装函数
  • 参考文献


主成分分析法的评价步骤

1、对原始数据进行标准化处理。将各指标值主成分权重计算_数学建模转化为标准化指标:

主成分权重计算_系数矩阵_02


其中:

主成分权重计算_系数矩阵_03


主成分权重计算_数学建模_04为第主成分权重计算_系数矩阵_05个指标的样本均值和样本标准差。对应地,称:

主成分权重计算_数学建模_06


为标准化指标变量。

2、计算相关系数矩阵主成分权重计算_数据分析_07。相关系数矩阵主成分权重计算_数学建模_08,有:

主成分权重计算_主成分权重计算_09


其中,主成分权重计算_数学建模_10主成分权重计算_数据分析_11是第主成分权重计算_数学建模_12个指标与第主成分权重计算_系数矩阵_05个指标的相关系数。

3、计算特征值和特征向量。计算相关系数矩阵主成分权重计算_数据分析_07的特征值主成分权重计算_特征向量_15,及对应的标准化特征向量主成分权重计算_系数矩阵_16,其中主成分权重计算_系数矩阵_17,由特征向量组成5个新的指标变量:

主成分权重计算_数学建模_18


其中,主成分权重计算_系数矩阵_19是第一主成分,主成分权重计算_特征向量_20是第二主成分,…,主成分权重计算_数学建模_21是第五主成分。

4、选择主成分权重计算_数据分析_22个主成分,计算综合评价值。

(1)计算特征值主成分权重计算_特征向量_23的信息贡献率和累积贡献率。称为:

主成分权重计算_系数矩阵_24


为主成分主成分权重计算_主成分权重计算_25的信息贡献率,而且称:

主成分权重计算_数据分析_26


为主成分主成分权重计算_主成分权重计算_27的累积贡献率。当主成分权重计算_系数矩阵_28接近于1(主成分权重计算_系数矩阵_29时,则选择前主成分权重计算_系数矩阵_30个指标变量主成分权重计算_主成分权重计算_27作为主成分权重计算_系数矩阵_30个主成分,代替原来的5个指标变量,从而可对主成分权重计算_系数矩阵_30个主成分进行综合分析。

(2)计算综合得分:

主成分权重计算_主成分权重计算_34


其中,主成分权重计算_数据分析_35为第主成分权重计算_系数矩阵_05个主成分的信息贡献率,根据综合得分值就可进行评价。

自行封装函数

1、该函数需要使用者自行定义想要选取的主成分的个数,但选择主成分个数时受到人的主观意愿影响较强。

function [stf,ind] = main_element_analyzing(gj,num)
%   main_element_analyzing 该函数用于进行主成分分析
%   输入的gj矩阵要求每一列代表评价指标,每一行代表评价对象
%   num为选取的主成分的个数
gj=zscore(gj); %数据标准化
r=corrcoef(gj);  %计算相关系数矩阵
%下面利用相关系数矩阵进行主成分分析,x的列为r的特征向量,即主成分的系数
[x,~,z]=pcacov(r); %y为r的特征值,z为各个主成分的贡献率
f=repmat(sign(sum(x)),size(x,1),1); %构造与x同维数的元素为±1的矩阵
x=x.*f; %修改特征向量的正负号,每个特征向量乘以所有分量和的符号函数值
% num=3;  %num为选取的主成分的个数
df=gj*x(:,[1:num]);  %计算各个主成分的得分
tf=df*z(1:num)/100; %计算综合得分
[stf,ind]=sort(tf,'descend');  %把得分按照从高到低的次序排列
stf=stf';
ind=ind';
end

2、该函数需要使用者自行设定选择主成分个数的阈值大小,这样可以使主成分的个数选择更加合理化

function [stf,ind,num] = main_element_analyzing(gj,alpha_p)
%   main_element_analyzing 该函数用于进行主成分分析
%   输入的gj矩阵要求每一列代表评价指标,每一行代表评价对象
%   num为选取的主成分的个数
%   alpha_p为自主设定的、用于选择主成分的阈值大小,注意其单位是百分比
gj=zscore(gj); %数据标准化
r=corrcoef(gj);  %计算相关系数矩阵
%下面利用相关系数矩阵进行主成分分析,x的列为r的特征向量,即主成分的系数
[x,y,z]=pcacov(r); %y为r的特征值,z为各个主成分的贡献率
for i=1:length(z)  %通过确定累积贡献率的大小判断出要选择主成分的个数
    temp=sum(z(1:i,1),1);
    if temp>alpha_p
        num=i-1;
        break;
    elseif temp==alpha_p
        num=i;
        break;
    end
end
f=repmat(sign(sum(x)),size(x,1),1); %构造与x同维数的元素为±1的矩阵
x=x.*f; %修改特征向量的正负号,每个特征向量乘以所有分量和的符号函数值
df=gj*x(:,[1:num]);  %计算各个主成分的得分
tf=df*z(1:num)/100; %计算综合得分
[stf,ind]=sort(tf,'descend');  %把得分按照从高到低的次序排列
stf=stf';
ind=ind';
end

提示:在使用时一定要注意主成分权重计算_系数矩阵_28的单位是百分比!!!

参考文献

司守奎,孙玺菁. 数学建模算法与应用. 北京:国防工业出版社,2011.