yangjiangong的个人博客分享 http://blog.sciencenet.cn/u/yangjiangong

博文

Matlab: princomp() 主成分分析

已有 32738 次阅读 2013-10-4 10:51 |个人分类:Matlab|系统分类:科研笔记

Matlab 提供了进行主成分分析的函数 princomp()。由于主成分分析(principile component analysis,PCA)这个概念在不同领域(统计学、数学等)的解释差异较大,所以,对 Matlab 中这个函数的理解与使用也稍有困难。本文通过使用对该函数做一点儿解释。不过,其中亦有几个不明白的地方,望熟悉者回复给予解释,谢谢。


语法:

[COEFF,SCORE] = princomp(X)
[COEFF,SCORE,latent] = princomp(X)
[COEFF,SCORE,latent,tsquare] = princomp(X)
[...] = princomp(X,'econ')


1、输入参数 X 是一个 n 行 p 列的矩阵。每行代表一个样本观察数据,每列则代表一个属性,或特征。


2、COEFF 就是所需要的特征向量组成的矩阵,是一个 p 行 p 列的矩阵,没列表示一个出成分向量,经常也称为(协方差矩阵的)特征向量。并且是按照对应特征值降序排列的。所以,如果只需要前 k 个主成分向量,可通过:COEFF(:,1:k) 来获得。


3、SCORE 表示原数据在各主成分向量上的投影。但注意:是原数据经过中心化后在主成分向量上的投影(the representation of X in the principal component space.  Rows of SCORE correspond to observations, columns to components.)。即通过:SCORE = x0*COEFF 求得。其中 x0 是中心平移后的 X(注意:是对维度进行中心平移,而非样本。),因此在重建时,就需要加上这个平均值了。


4、latent 是一个列向量,表示特征值,并且按降序排列。(the principal component   variances, i.e., the eigenvalues of the covariance matrix of X)。


以上三个返回参数是我们最常用的。


函数 princomp() 对特征值和特征向量的求解过程,完全等同于PCA的实际求解过程:

1)获取样本数据 X ,样本为行,特征为列。

2)对样本数据中心化,得S(S = X的各列减去各列的均值)。

3)求 S 的协方差矩阵 C = cov(S)

4) 对协方差矩阵 C 进行特征分解 [P,Lambda] = eig(C);

5)结束。






http://blog.sciencenet.cn/blog-936367-729746.html

上一篇:旅行者1号已飞出太阳系:佛教的智慧真是博大精深!
下一篇:如何保存网页上看到的视频

0

该博文允许注册用户评论 请点击登录 评论 (2 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-10-24 13:26

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部