关于matlab中princomp的使用说明讲解
来源:互联网 发布:java gb2312转utf8 编辑:程序博客网 时间:2024/05/29 11:12
%% 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.
% 关于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.
阅读全文
0 0
- 关于matlab中princomp的使用说明讲解
- 关于matlab中princomp的使用说明讲解小例子
- 关于 R 中 princomp 和 prcomp 的 区别
- MATLAB中PCA函数princomp个人理解
- matlab中利用princomp实现PCA降维
- (备用)matlab自带的princomp函数
- matlab中find函数的使用说明
- Matlab中find函数的使用说明
- matlab中find函数的使用说明
- matlab中find函数的使用说明
- matlab中find函数的使用说明
- matlab中find函数的使用说明
- matlab中uitable 的一些使用说明
- matlab中find函数的使用说明
- matlab中find函数的使用说明
- matlab中find函数的使用说明
- matlab中find函数的使用说明
- matlab中zeros 和 ones 这两个函数的用法以及size的用法,princomp,pcacov,pcares,barttest四大分析函数用法
- 在使用Mac终端的时候出现Permission denied的问题
- [SYZOI Round1]滑稽♂树
- PG常见错误集合
- Kotlin 实现按钮点击跳转监听事件
- 同页与不同页电气连接
- 关于matlab中princomp的使用说明讲解
- 实现高性能纠删码引擎 | 纠删码技术详解(下)
- android图片内存优化
- Java 模拟浏览器下载
- Android短信验证码自动填写功能的实现
- js如何判断一个对象为空
- IntelliJ IDEA 设置代码提示或自动补全的快捷键
- DL开源框架Caffe | 目标检测Faster-rcnn问题全解析
- JAVA异常