主成分分析法

    xiaoxiao2021-03-25  176

    主成分分析法 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)计算协方差矩阵  计算样本数据的协方差矩阵:,其中  (3)求出Σ的特征值及相应的正交化单位特征向量   Σ的前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 前三个主成分得分系数 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 各主成分的贡献率: per =    42.9949    27.7727    22.4333     6.7990 贡献率绘成直方图 方差贡献散点图(红)及 山麓图(绿) 绘制降成2维成份的散点图 6、算法优缺点 主成分分析法的优点:  (1)、 可消除评价指标之间的相关影响   因为主成分分析在对原指标变量进行变换后形成了彼此相互独立的主成分,而且实践证明指标之间相关程度越高,主成分分析效果越好。  (2)、 可减少指标选择的工作量   对于其它评价方法,由于难以消除评价指标间的相关影响,所以选择指标时要花费不少精力,而主成分分析由于可以消除这种相关影响,所以在指标选择上相对容易些。 (3)、 当评级指标较多时还可以在保留绝大部分信息的情况下用少数几个综合指标代替原指标进行分析   主成分分析中各主成分是按方差大小依次排列顺序的,在分析问题时,可以舍弃一部分主成分,只取前后方差较大的几个主成分来代表原变量,从而减少了计算工作量。  (4)、 在综合评价函数中,各主成分的权数为其贡献率,它反映了该主成分包含原始数据的信息量占全部信息量的比重,这样确定权数是客观的、合理的,它克服了某些评价方法中认为确定权数的缺陷。  主成分分析法的缺点:  (1)、在主成分分析中,我们首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平(即变量降维后的信息量须保持在一个较高水平上),其次对这些被提取的主成分必须都能够给出符合实际背景和意义的解释(否则主成分将空有信息量而无实际含义)。  (2)、主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。因此,提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),否则维数降低的“利”可能抵不过主成分含义不如原始变量清楚的“弊”。 (3)、当主成分的因子负荷的符号有正有负时,综合评价函数意义就不明确。   
    转载请注明原文地址: https://ju.6miu.com/read-32995.html

    最新回复(0)