主成分分析法
1、定义:
主成分分析旨在利用降维的思想,将原来众多具有一定相关性的指标x1.x2....xp重新组合成一组互不相关的综合指标Fm(主成分)来代替原指标
Fm=a1m*X1+a2m*X2.......+apm*Xp,其中每个主成分都能够反映原始变量的大部分信息,且所含信息互不重复,主成分Fm的方差Var(Fm)越大,其所含信息量越多,一般F1信息量最多,称为第一主成分。这种方法在引进多方面变量的同时将复杂因素归结为几个主成分,使问题简单化,同时得到的结果更加科学有效的数据信息。
2、基本原理
基本思想是将原来众多的具有一定相关性的指标X1,X2,„,XP(比如p个指标),重新组合成一组较少个数的互不相关的综合指标Fm来代替原来指标。设F1表示原变量的第一个线性组合所形成的主成分指标,
即F1=a11*X1+a21*X2.......+ap1*Xp
每一个主成分所提取的信息量可用其方差来度量,其方差Var(F1)越大,表示F1包含的信息越多。第一主成分F1所含的信息量最大,在所有的线性组合中选取的F1应该是X1,X2,„,XP的所有线性组合中方差最大的,故称F1为第一主成分。如果第一主成分不足以代表原来p个指标的信息,再考虑选取第二个主成分指标F2,为有效地反映原信息,F1已有的信息就不需要再出现在F2中,即F2与F1要保持独立、不相关,用数学语言表达就是其协方差Cov(F1,
F2)=0,所以F2是与F1不相关的X1,X2.....XP的所有线性组合中方差最大的,故称F2为第二主成分,依此类推构造出的F1、F2......Fm为原变量指标X1、X2....XP第一、第二.....、第m个主成分。
3、算法步骤
(1)数据标准化
(2)计算协方差矩阵
计算样本数据的协方差矩阵:
,其中
计算样本数据的协方差矩阵:
Σ的前m个较大的特征值
>0,
>0,...
>0,就是前m个主成分对应的方差,
对应的单位特征向量
就是主成分Fi的关于原变量的系数,则原变量的第i个主成分Fi为: Fi
=
'X
主成分的方差(信息)贡献率
用来反映信息量的大小,
为:
主成分的方差(信息)贡献率
(4)选择主成分
最终要选择几个主成分,即F1,F2.....Fm中m的确定是通过方差(信息)累计贡献率G(m)来确定
当累积贡献率大于85%时,就认为能足够反映原来变量的信息了,对应的m就是抽取的前m个主成分。
(5)计算主成分载荷
主成分载荷是反映主成分Fi与原变量Xj之间的相互关联程度,原来变量Xj(j=1,2 ,„, p)在诸主成分Fi(i=1,2......m)上的荷载
在SPSS软件中主成分分析后的分析结果中,“成分矩阵”反应的就是主成分载荷矩阵。
(6)计算主成分得分
计算样品在m个主成分上的得分:
4、MATLAB实现
dataset=[
263.862 1.61144 2.75468 0.266575
268.764 2.07218 2.61756 0.182597
261.196 1.59769 2.35037 0.182114
248.708 2.09609 2.85279 0.257724
253.365 1.69457 2.9492 0.189702
268.434 1.56819 2.78113 0.13252
258.741 2.14653 2.69111 0.136469
244.192 2.02156 2.22607 0.298066
219.738 1.61224 1.88599 0.166298
244.702 1.91477 2.25945 0.187569
245.286 2.12499 2.35282 0.161602
251.96 1.83714 2.53519 0.240271
251.164 1.74167 2.62961 0.211887
251.824 2.00133 2.62665 0.211991
257.68 2.14878 2.65686 0.203846];
stdr=std(dataset); %求个变量的标准差
[n,m]=size(dataset); %定义矩阵行列数
sddata=dataset./stdr(ones(n,1),:); %将原始数据采集标准化
sddata %输出标准化数据
[p,princ,eigenvalue,t2]=princomp(sddata);%调用前三个主成分系数
p3=p(:,1:3); %提取前三个主成分得分系数,通过看行可以看出对应的原始数据的列,每个列在每个主成分的得分
p3%输出前三个主成分得分系数
sc=princ(:,1:3); %提取前三个主成分得分值
sc %输出前三个主成分得分值
e=eigenvalue(1:3)'; %提取前三个特征根并转置
M=e(ones(m,1),:).^0.5; %输出前三个特征根并转置
compmat=p3.*M; %利用特征根构造变换矩阵
per=100*eigenvalue/sum(eigenvalue); %求出成分载荷矩阵的前三列
per%求出各主成分的贡献率
cumsum(per) %列出各主成分的累积贡献率
figure(1)
pareto(per); %将贡献率绘成直方图
t2
figure(2)
%输出距离
plot(eigenvalue,'r+'); %绘制方差贡献散点图
hold on
%保持图形
plot(eigenvalue,'g-');%绘制方差贡献山麓图
figure(3)%关闭图形
plot(princ(:,1),princ(:,2),'+');%绘制2维成份散点图
%gname
%,(rowname)
%标示个别散点
[st2,index]=sort(t2);
%st2=flipud(st2);
%index=flipud(index);
%extreme=index(1);
5、运行结果:
标准化数据:
sddata =
21.7445 7.2118 9.8129 5.6352
22.1485 9.2738 9.3245 3.8600
21.5248 7.1502 8.3727 3.8498
20.4957 9.3808 10.1624 5.4481
20.8795 7.5838 10.5059 4.0102
22.1213 7.0182 9.9072 2.8014
21.3225 9.6065 9.5865 2.8849
20.1235 9.0472 7.9299 6.3009
18.1083 7.2154 6.7184 3.5154
20.1656 8.5693 8.0488 3.9651
20.2137 9.5101 8.3814 3.4161
20.7637 8.2219 9.0311 5.0791
20.6981 7.7946 9.3674 4.4791
20.7525 8.9567 9.3569 4.4813
21.2351 9.6166 9.4645 4.3091
21.7445 7.2118 9.8129 5.6352
22.1485 9.2738 9.3245 3.8600
21.5248 7.1502 8.3727 3.8498
20.4957 9.3808 10.1624 5.4481
20.8795 7.5838 10.5059 4.0102
22.1213 7.0182 9.9072 2.8014
21.3225 9.6065 9.5865 2.8849
20.1235 9.0472 7.9299 6.3009
18.1083 7.2154 6.7184 3.5154
20.1656 8.5693 8.0488 3.9651
20.2137 9.5101 8.3814 3.4161
20.7637 8.2219 9.0311 5.0791
20.6981 7.7946 9.3674 4.4791
20.7525 8.9567 9.3569 4.4813
21.2351 9.6166 9.4645 4.3091
前三个主成分得分系数
p3 =0.7035 -0.1143 -0.0272
0.0866 0.6780 0.7281
0.7045 0.0663 -0.0958
-0.0347 0.7231 -0.6782
前三个主成分得分值:
sc =
1.0265 0.1191 -1.8961
1.2067 0.1549 0.8450
-0.0862 -1.2841 -0.5861
0.5885 1.6203 -0.1895
0.9947 -0.6589 -0.5659
1.4394 -2.0980 -0.1343
0.8728 -0.2128 1.7460
-1.3046 1.9052 -0.7868
-3.6380 -1.2010 -0.0607
-1.1517 -0.1047 0.4369
-0.7830 0.1528 1.4610
-0.1076 0.4621 -0.6820
0.0670 -0.2316 -0.6166
0.1984 0.5509 0.2276
0.6769 0.8258 0.8014
1.0265 0.1191 -1.8961
1.2067 0.1549 0.8450
-0.0862 -1.2841 -0.5861
0.5885 1.6203 -0.1895
0.9947 -0.6589 -0.5659
1.4394 -2.0980 -0.1343
0.8728 -0.2128 1.7460
-1.3046 1.9052 -0.7868
-3.6380 -1.2010 -0.0607
-1.1517 -0.1047 0.4369
-0.7830 0.1528 1.4610
-0.1076 0.4621 -0.6820
0.0670 -0.2316 -0.6166
0.1984 0.5509 0.2276
0.6769 0.8258 0.8014
各主成分的贡献率:
per =
42.9949
27.7727
22.4333
6.7990
42.9949
27.7727
22.4333
6.7990
贡献率绘成直方图
方差贡献散点图(红)及 山麓图(绿)
绘制降成2维成份的散点图
6、算法优缺点
主成分分析法的优点:
(1)、 可消除评价指标之间的相关影响
因为主成分分析在对原指标变量进行变换后形成了彼此相互独立的主成分,而且实践证明指标之间相关程度越高,主成分分析效果越好。
(1)、 可消除评价指标之间的相关影响
因为主成分分析在对原指标变量进行变换后形成了彼此相互独立的主成分,而且实践证明指标之间相关程度越高,主成分分析效果越好。
(2)、 可减少指标选择的工作量
对于其它评价方法,由于难以消除评价指标间的相关影响,所以选择指标时要花费不少精力,而主成分分析由于可以消除这种相关影响,所以在指标选择上相对容易些。
对于其它评价方法,由于难以消除评价指标间的相关影响,所以选择指标时要花费不少精力,而主成分分析由于可以消除这种相关影响,所以在指标选择上相对容易些。
(3)、 当评级指标较多时还可以在保留绝大部分信息的情况下用少数几个综合指标代替原指标进行分析
主成分分析中各主成分是按方差大小依次排列顺序的,在分析问题时,可以舍弃一部分主成分,只取前后方差较大的几个主成分来代表原变量,从而减少了计算工作量。
主成分分析中各主成分是按方差大小依次排列顺序的,在分析问题时,可以舍弃一部分主成分,只取前后方差较大的几个主成分来代表原变量,从而减少了计算工作量。
(4)、 在综合评价函数中,各主成分的权数为其贡献率,它反映了该主成分包含原始数据的信息量占全部信息量的比重,这样确定权数是客观的、合理的,它克服了某些评价方法中认为确定权数的缺陷。
主成分分析法的缺点:
(1)、在主成分分析中,我们首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平(即变量降维后的信息量须保持在一个较高水平上),其次对这些被提取的主成分必须都能够给出符合实际背景和意义的解释(否则主成分将空有信息量而无实际含义)。
(1)、在主成分分析中,我们首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平(即变量降维后的信息量须保持在一个较高水平上),其次对这些被提取的主成分必须都能够给出符合实际背景和意义的解释(否则主成分将空有信息量而无实际含义)。
(2)、主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。因此,提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),否则维数降低的“利”可能抵不过主成分含义不如原始变量清楚的“弊”。
(3)、当主成分的因子负荷的符号有正有负时,综合评价函数意义就不明确。
主成分分析是一种降维方法,通过线性组合原始变量形成互不相关的主成分,最大化保留信息。基本步骤包括数据标准化、计算协方差矩阵、求特征值和特征向量、选择主成分、计算主成分载荷和得分。在MATLAB中,可以使用`princomp`函数实现。主成分分析优点在于消除指标相关性、减少计算工作量,但可能带有模糊的解释性,并需要确保提取的主成分有足够的累计贡献率。

被折叠的 条评论
为什么被折叠?



