||
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)结束。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-23 15:32
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社