资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
10.利用Matlab编程实现主成分分析1.概述 Matlab语言是当今国际上科学界 (尤其是自动控制领域) 最具影响力、也是最有活力的软件。它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、与其他程序和语言的便捷接口的功能。Matlab 语言在各国高校与研究单位起着重大的作用。主成分分析是把原来多个变量划为少数几个综合指标的一种统计分析方法,从数学角度来看,这是一种降维处理技术。 1.1主成分分析计算步骤 计算相关系数矩阵 (1)在(3.5.3)式中,rij(i,j=1,2,p)为原变量的xi与xj之间的相关系数,其计算公式为 (2)因为R是实对称矩阵(即rij=rji),所以只需计算上三角元素或下三角元素即可。 计算特征值与特征向量首先解特征方程,通常用雅可比法(Jacobi)求出特征值,并使其按大小顺序排列,即;然后分别求出对应于特征值的特征向量。这里要求=1,即,其中表示向量的第j个分量。 计算主成分贡献率及累计贡献率主成分的贡献率为累计贡献率为一般取累计贡献率达8595%的特征值所对应的第一、第二,第m(mp)个主成分。 计算主成分载荷其计算公式为 (3)得到各主成分的载荷以后,还可以按照(3.5.2)式进一步计算,得到各主成分的得分 (4)2.程序结构及函数作用在软件Matlab中实现主成分分析可以采取两种方式实现:一是通过编程来实现;二是直接调用Matlab种自带程序实现。下面主要主要介绍利用Matlab的矩阵计算功能编程实现主成分分析。2.1程序结构Cwprint.m 主函数 子函数 Cwfac.mCwscore.mCwstd.m2.2函数作用Cwstd.m用总和标准化法标准化矩阵Cwfac.m计算相关系数矩阵;计算特征值和特征向量;对主成分进行排序;计算各特征值贡献率;挑选主成分(累计贡献率大于85%),输出主成分个数;计算主成分载荷Cwscore.m计算各主成分得分、综合得分并排序Cwprint.m读入数据文件;调用以上三个函数并输出结果3.源程序3.1 cwstd.m%cwstd.m,用总和标准化法标准化矩阵function std=cwstd(vector)cwsum=sum(vector,1); %对列求和a,b=size(vector); %矩阵大小,a为行数,b为列数for i=1:a for j=1:b std(i,j)= vector(i,j)/cwsum(j); endend3.2 cwfac.m%cwfac.mfunction result=cwfac(vector);fprintf(相关系数矩阵:n)std=CORRCOEF(vector) %计算相关系数矩阵fprintf(特征向量(vec)及特征值(val):n)vec,val=eig(std) %求特征值(val)及特征向量(vec)newval=diag(val) ;y,i=sort(newval) ; %对特征根进行排序,y为排序结果,i为索引fprintf(特征根排序:n)for z=1:length(y) newy(z)=y(length(y)+1-z);endfprintf(%gn,newy)rate=y/sum(y);fprintf(n贡献率:n)newrate=newy/sum(newy)sumrate=0;newi=;for k=length(y):-1:1 sumrate=sumrate+rate(k); newi(length(y)+1-k)=i(k); if sumrate0.85 break; end end %记下累积贡献率大85%的特征值的序号放入newi中fprintf(主成分数:%gnn,length(newi);fprintf(主成分载荷:n)for p=1:length(newi) for q=1:length(y) result(q,p)=sqrt(newval(newi(p)*vec(q,newi(p); endend %计算载荷disp(result)3.3 cwscore.m%cwscore.m,计算得分function score=cwscore(vector1,vector2);sco=vector1*vector2;csum=sum(sco,2);newcsum,i=sort(-1*csum);newi,j=sort(i);fprintf(计算得分:n)score=sco,csum,j %得分矩阵:sco为各主成分得分;csum为综合得分;j为排序结果 3.4 cwprint.m%cwprint.mfunction print=cwprint(filename,a,b); %filename为文本文件文件名,a为矩阵行数(样本数),b为矩阵列数(变量指标数)fid=fopen(filename,r)vector=fscanf(fid,%g,a b);fprintf(标准化结果如下:n)v1=cwstd(vector)result=cwfac(v1);cwscore(v1,result);4.程序测试4.1原始数据中国大陆35个大城市某年的10项社会经济统计指标数据见下表。城 市名 称年底总人口(万人) 非农业人口比(%) 农 业总产值(万元)工业总产值(万元)客运总量(万人)货运总量(万吨)地方财政预算内收入(万元)城乡居民年底储蓄余额(万元)在岗职工人数(万人)在岗职工工资总额(万元)北 京1 249.900.597 81 843 42719 999 70620 32345 5622 790 86326 806 646410.805 773 301天 津910.170.580 91 501 13622 645 5023 25926 3171 128 07311 301 931202.682 254 343石 家 庄875.400.233 22 918 6806 885 7682 9291 911352 3487 095 87595.60758 877太 原299.920.656 3236 0382 737 7501 93711 895203 2773 943 10088.65654 023呼和浩特207.780.441 2365 343816 4522 3512 623105 7831 396 58842.11309 337沈 阳677.080.629 91 295 4185 826 7337 78215 412567 9199 016 998135.451 152 811大 连545.310.494 61 879 7398 426 38510 78019 187709 2277 556 79694.15965 922长 春691.230.406 81 853 2105 966 3434 8109 532357 0964 803 744102.63884 447哈 尔 滨927.090.462 72 663 8554 186 1236 7207 520481 4436 450 020172.791 309 151上 海1 313.120.738 42 069 01954 529 0986 40644 4854 318 50025 971 200336.845 605 445南 京537.440.534 1989 19913 072 73714 26911 193664 2995 680 472113.811 357 861杭 州616.050.355 61 414 73712 000 79617 88311 684449 5937 425 96796.901 180 947宁 波538.410.254 71 428 23510 622 86622 21510 298501 7235 246 35062.15824 034合 肥429.950.318 4628 7642 514 1254 8931 517233 6281 622 93147.27369 577福 州583.130.273 32 152 2886 555 3518 8517 190467 5245 030 22069.59680 607厦 门128.990.486 5333 3745 751 1243 7282 570418 7582 108 33146.93657 484南 昌424.200.398 8688 2892 305 8813 6743 189167 7142 640 46062.08479 ,555济 南557.630.408 51 486 3026 285 8825 91511 775460 6904 126 97083.31756 696青 岛702.970.369 32 382 32011 492 03613 40817 038658 4354 978 045103.52961 704郑 州615.360.342 4677 4255 287 60110 4336 768387 2525 135 33884.66696 848武 汉740.200.586 91
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号