主成分分析法
主成分分析法的评价步骤
1、对原始数据进行标准化处理。将各指标值
a
i
j
a_{ij}
aij转化为标准化指标:
其中:
即
μ
j
,
s
j
μ_j,s_j
μj,sj为第
j
j
j个指标的样本均值和样本标准差。对应地,称:
为标准化指标变量。
2、计算相关系数矩阵
R
\R
R。相关系数矩阵
R
=
(
r
i
j
)
5
∗
5
\R=(r_{ij})_{5*5}
R=(rij)5∗5,有:
其中,
r
i
i
=
1
,
r
i
j
=
r
j
i
r_{ii}=1,r_{ij}=r_{ji}
rii=1,rij=rji,
r
i
j
r_{ij}
rij是第
i
i
i个指标与第
j
j
j个指标的相关系数。
3、计算特征值和特征向量。计算相关系数矩阵
R
\R
R的特征值
λ
1
>
=
λ
2
>
.
.
.
>
=
λ
5
>
=
0
λ_1>=λ_2>...>=λ_5>=0
λ1>=λ2>...>=λ5>=0,及对应的标准化特征向量
u
1
,
u
2
,
.
.
.
u
5
u_1,u_2,...u_5
u1,u2,...u5,其中
u
j
=
[
u
1
j
,
u
2
j
,
.
.
.
,
u
5
j
]
T
u_j=[u_{1j},u_{2j},...,u_{5j}]^T
uj=[u1j,u2j,...,u5j]T,由特征向量组成5个新的指标变量:
其中,
y
1
y_1
y1是第一主成分,
y
2
y_2
y2是第二主成分,…,
y
5
y_5
y5是第五主成分。
4、选择
p
(
p
<
=
5
)
p(p<=5)
p(p<=5)个主成分,计算综合评价值。
(1)计算特征值
λ
j
(
j
=
1
,
2
,
.
.
.
,
5
)
λ_j(j=1,2,...,5)
λj(j=1,2,...,5)的信息贡献率和累积贡献率。称为:
为主成分
y
j
y_j
yj的信息贡献率,而且称:
为主成分
y
1
,
y
2
,
.
.
.
y
p
y_1,y_2,...y_p
y1,y2,...yp的累积贡献率。当
α
p
α_p
αp接近于1(
α
p
=
0.85
,
0.90
,
0.95
)
α_p=0.85,0.90,0.95)
αp=0.85,0.90,0.95)时,则选择前
p
p
p个指标变量
y
1
,
y
2
,
.
.
.
y
p
y_1,y_2,...y_p
y1,y2,...yp作为
p
p
p个主成分,代替原来的5个指标变量,从而可对
p
p
p个主成分进行综合分析。
(2)计算综合得分:
其中,
b
j
b_j
bj为第
j
j
j个主成分的信息贡献率,根据综合得分值就可进行评价。
自行封装函数
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
提示:在使用时一定要注意 α p α_p αp的单位是百分比!!!
参考文献
司守奎,孙玺菁. 数学建模算法与应用. 北京:国防工业出版社,2011.