加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于matlab中princomp的使用说明(转)

(2011-09-28 14:05:46)
标签:

it

分类: matlab
论坛里有的朋友对于matlab自带pca函数princomp的输出是什么有疑问.
http://www.ilovematlab.cn/thread-54493-1-1.html
在此做了一个小例子讲解.(例子是matlab自带,您也可以直接看matlab的帮助文件,此贴仅给菜鸟看,高手无需~O(∩_∩)O)

=====================
总结:
1,四个输出是(特征向量_每一列为原始数据组合成主成分的系数,新的坐标_中心化的坐标,特征值_主成分的系数,观察量到中心的距离);
2,切记:行为元组,列为属性
====================
%% test for princomp(Principal Component Analysis)

% 关于matlab中princomp的使用说明讲解小例子 by faruto
% 能看懂本程序及相关注释讲解的前提是您对PCA有一定的了解~O(∩_∩)O
% 2009.10.27
clear;
clc
%% load cities data
load cities
% whos
 Name             Size         Bytes  Class
 categories       9x14           252  char array
 names          329x43         28294  char array
 ratings        329x9          23688  double array
%% box plot for ratings data
% To get a quick impression of the ratings data, make a box plot
figure;
boxplot(ratings,'orientation','horizontal','labels',categories);
grid on;
print -djpeg 1;

%% pre-process
stdr = std(ratings);
sr = ratings./repmat(stdr,329,1);
%% use princomp 
[coef,score,latent,t2] = princomp(sr);
%% 输出参数讲解

% coef:9*9
% 主成分系数:即原始数据线性组合生成主成分数据中每一维数据前面的系数.
% coef的每一列代表一个新生成的主成分的系数.
% 比如你想取出前三个主成分的系数,则如下可实现:pca3 = coef(:,1:3);

% score:329*9
% 字面理解:主成分得分
% 即原始数据在新生成的主成分空间里的坐标值.

% latent:9*1
% 一个列向量,由sr的协方差矩阵的特征值组成.
% 即 latent = sort(eig(cov(sr)),'descend');
% 测试如下:
% sort(eig(cov(sr)),'descend') =
   3.4083
   1.2140
   1.1415
   0.9209
   0.7533
   0.6306
   0.4930
   0.3180
   0.1204
% latent =
   3.4083
   1.2140
   1.1415
   0.9209
   0.7533
   0.6306
   0.4930
   0.3180
   0.1204

% t2:329*1
% 一中多元统计距离,记录的是每一个观察量到中心的距离
%% 如何提取主成分,达到降为的目的
% 通过latent,可以知道提取前几个主成分就可以了.
figure;
percent_explained = 100*latent/sum(latent);
pareto(percent_explained);
xlabel('Principal Component');
ylabel('Variance Explained (%)');
print -djpeg 2;

% 图中的线表示的累积变量解释程度.
% 通过看图可以看出前七个主成分可以表示出原始数据的90%.
% 所以在90%的意义下只需提取前七个主成分即可,进而达到主成分提取的目的.
%% Visualizing the Results

结果的可视化
figure;
biplot(coef(:,1:2), 'scores',score(:,1:2),... 
'varlabels',categories);
axis([-.26 1 -.51 .51]);
print -djpeg 3;

% 横坐标和纵坐标分别表示第一主成分和第二主成分
% 红色的点代表329个观察量,其坐标就是那个score
% 蓝色的向量的方向和长度表示了每个原始变量对新的主成分的贡献,其坐标就是那个coef.



==============本帖子的pdf版本
[hide][/hide]

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有