主成分分析源程序代码
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) %标示个别散点代表的省data市 [st2,index]=sort(t2); %st2=flipud(st2);
%index=flipud(index); %extreme=index(1);