资源描述:
《主成分分析报告matlab程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、标准实用Matlab编程实现主成分分析.程序结构及函数作用在软件Matlab中实现主成分分析可以采取两种方式实现:一是通过编程来实现;二是直接调用Matlab种自带程序实现。下面主要主要介绍利用Matlab的矩阵计算功能编程实现主成分分析。1程序结构Cwprint.m主函数子函数Cwfac.mCwscore.mCwstd.m2函数作用Cwstd.m——用总和标准化法标准化矩阵Cwfac.m——计算相关系数矩阵;计算特征值和特征向量;对主成分进行排序;计算各特征值贡献率;挑选主成分(累计贡献率大于85%),输出主成分
2、个数;计算主成分载荷Cwscore.m——计算各主成分得分、综合得分并排序Cwprint.m——读入数据文件;调用以上三个函数并输出结果文案大全标准实用3.源程序3.1cwstd.m总和标准化法标准化矩阵%cwstd.m,用总和标准化法标准化矩阵functionstd=cwstd(vector)cwsum=sum(vector,1);%对列求和[a,b]=size(vector);%矩阵大小,a为行数,b为列数fori=1:aforj=1:bstd(i,j)=vector(i,j)/cwsum(j);endend3
3、.2cwfac.m计算相关系数矩阵%cwfac.mfunctionresult=cwfac(vector);fprintf('相关系数矩阵:')std=CORRCOEF(vector)%计算相关系数矩阵fprintf('特征向量(vec)及特征值(val):')[vec,val]=eig(std)%求特征值(val)及特征向量(vec)newval=diag(val);[y,i]=sort(newval);%对特征根进行排序,y为排序结果,i为索引fprintf('特征根排序:')forz=1:leng
4、th(y)newy(z)=y(length(y)+1-z);endfprintf('%g',newy)rate=y/sum(y);fprintf('贡献率:')newrate=newy/sum(newy)sumrate=0;newi=[];fork=length(y):-1:1sumrate=sumrate+rate(k);newi(length(y)+1-k)=i(k);ifsumrate>0.85break;endend%记下累积贡献率大85%的特征值的序号放入newi中fprintf('主成分数:
5、%g',length(newi));fprintf('主成分载荷:')forp=1:length(newi)文案大全标准实用forq=1:length(y)result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p));endend%计算载荷disp(result)3.3cwscore.m%cwscore.m,计算得分functionscore=cwscore(vector1,vector2);sco=vector1*vector2;csum=sum(sco,2);[n
6、ewcsum,i]=sort(-1*csum);[newi,j]=sort(i);fprintf('计算得分:')score=[sco,csum,j]%得分矩阵:sco为各主成分得分;csum为综合得分;j为排序结果3.4cwprint.m%cwprint.mfunctionprint=cwprint(filename,a,b);%filename为文本文件文件名,a为矩阵行数(样本数),b为矩阵列数(变量指标数)fid=fopen(filename,'r')vector=fscanf(fid,'%g',[ab
7、]);fprintf('标准化结果如下:')v1=cwstd(vector)result=cwfac(v1);cwscore(v1,result);4.程序测试例题4.1原始数据中国大陆35个大城市某年的10项社会经济统计指标数据见下表。文案大全标准实用城市名称年底总人口(万人)非农业人口比(%)农业总产值(万元)工业总产值(万元)客运总量(万人)货运总量(万吨)地方财政预算内收入(万元)城乡居民年底储蓄余额(万元)在岗职工人数(万人)在岗职工工资总额(万元)北京1249.900.597818434271999
8、97062032345562279086326806646410.805773301天津910.170.5809150113622645502325926317112807311301931202.682254343石家庄875.400.23322918680688576829291911352348709587595.60758877太原299.920.6