fboxster
2009-12-31, 12:04
我是初学者,想用matlab自带的princomp函数做主成分分析,看过论坛里原来的帖子了,还是用原来的数据,但是显示出来还是有问题
命令如下:
load hald;
X=[16.68 27.75 31.84 18.4 53 55 29 175;
19.7 27.75 32.94 19.2 59 55 33 287;
15.2 23.4 32.98 16.24 46 65 42 153;
7.25 8.97 21.3 4.76 34 62 39 163;
29.45 56.49 40.74 43.68 75 69 27 214;
32.93 42.78 49.98 33.87 66 50 33 260;
25.39 37.85 36.76 27.56 68 63 36 243;
15.05 19.49 27.21 14.21 56 76 36 175;
19.82 28.78 33.41 20.17 59 71 39 183;
21.13 35.2 39.16 26.52 52 62 35 173;
16.75 28.72 29.62 19.23 55 58 30 152;
15.83 28.03 26.4 17.43 61 61 33 160];
STX=std(X);
MX=mean(X);
[n,m]=size(X);
for ii=1:1:m
SX(:,ii)=(X(:,ii)-MX(ii))./STX(ii);
end
[PC,SCORE,LATENT]=princomp(SX);
[num2str(m),'个综合因子PC(按列放置)']
PC
[num2str(n),'个样本的Z得分(按行放置)']
SCORE
[num2str(m),'个综合因子的特征值(按列放置)']
LATENT'
[num2str(m),'个综合因子的方差占总方差百分比%(按列放置)']
figure(1);percent_explained = 100*LATENT'/sum(LATENT');
pareto(percent_explained);
xlabel('Principal Component');
ylabel('Variance Explained (%)');
%----将n个样本的分类进行图形表达
figure(2);plot3(SCORE(:,1),SCORE(:,2),SCORE(:,3),'*');grid on;
xlabel('第一主成分');
ylabel('第二主成分');
zlabel('第三主成分');
title('三维样本分类图');
for i=1:n;text(SCORE(:,1),SCORE(:,2),SCORE(:,3),['样本',num2str(i)]);end
figure(3);plot(SCORE(:,1),SCORE(:,2),'*');grid on;
xlabel('第一主成分');ylabel('第二主成分');title('二维样本分类图');
for i=1:n;text(SCORE(:,1),SCORE(:,2),['样本',num2str(i)]);end
SCORE(:,1),SCORE(:,2),SCORE(:,3)
但是在二维和三维样本分类图中,各个散点的标注有问题,原意是想显示成样本1,样本2诸如此类的。但这个text这个函数不太会用,请大家帮忙改下这段程序,谢谢。
命令如下:
load hald;
X=[16.68 27.75 31.84 18.4 53 55 29 175;
19.7 27.75 32.94 19.2 59 55 33 287;
15.2 23.4 32.98 16.24 46 65 42 153;
7.25 8.97 21.3 4.76 34 62 39 163;
29.45 56.49 40.74 43.68 75 69 27 214;
32.93 42.78 49.98 33.87 66 50 33 260;
25.39 37.85 36.76 27.56 68 63 36 243;
15.05 19.49 27.21 14.21 56 76 36 175;
19.82 28.78 33.41 20.17 59 71 39 183;
21.13 35.2 39.16 26.52 52 62 35 173;
16.75 28.72 29.62 19.23 55 58 30 152;
15.83 28.03 26.4 17.43 61 61 33 160];
STX=std(X);
MX=mean(X);
[n,m]=size(X);
for ii=1:1:m
SX(:,ii)=(X(:,ii)-MX(ii))./STX(ii);
end
[PC,SCORE,LATENT]=princomp(SX);
[num2str(m),'个综合因子PC(按列放置)']
PC
[num2str(n),'个样本的Z得分(按行放置)']
SCORE
[num2str(m),'个综合因子的特征值(按列放置)']
LATENT'
[num2str(m),'个综合因子的方差占总方差百分比%(按列放置)']
figure(1);percent_explained = 100*LATENT'/sum(LATENT');
pareto(percent_explained);
xlabel('Principal Component');
ylabel('Variance Explained (%)');
%----将n个样本的分类进行图形表达
figure(2);plot3(SCORE(:,1),SCORE(:,2),SCORE(:,3),'*');grid on;
xlabel('第一主成分');
ylabel('第二主成分');
zlabel('第三主成分');
title('三维样本分类图');
for i=1:n;text(SCORE(:,1),SCORE(:,2),SCORE(:,3),['样本',num2str(i)]);end
figure(3);plot(SCORE(:,1),SCORE(:,2),'*');grid on;
xlabel('第一主成分');ylabel('第二主成分');title('二维样本分类图');
for i=1:n;text(SCORE(:,1),SCORE(:,2),['样本',num2str(i)]);end
SCORE(:,1),SCORE(:,2),SCORE(:,3)
但是在二维和三维样本分类图中,各个散点的标注有问题,原意是想显示成样本1,样本2诸如此类的。但这个text这个函数不太会用,请大家帮忙改下这段程序,谢谢。