matlab中pca
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中pca相关的知识,希望对你有一定的参考价值。
使用了matlab中的pca方法[coeff,score,latent,tsquared,explained,mu] = pca(so10);so10为矩阵,有几个问题:1.这个方法有没有对数据进行去中心化处理?2.计算coeff用到了svd算法,对pca和svd的关系不太明白。3.这个score表示什么,它的每一行表示什么?4.这个mu表示什么?
1,4 matlab是有帮助文档的,我没有明白你所指的去中心化处理是什么,PCA的结果在数组自己的维度。以下是帮助文档,请仔细阅读
coeff = pca(X) returns the principal component coefficients, also known as loadings, for the n-by-p data matrix X. Rows of X correspond to observations and columns correspond to variables. The coefficient matrix is p-by-p. Each column of coeffcontains coefficients for one principal component, and the columns are in descending order of component variance. By default, pca centers the data and uses the singular value decomposition (SVD) algorithm.
example
coeff = pca(X,Name,Value) returns any of the output arguments in the previous syntaxes using additional options for computation and handling of special data types, specified by one or more Name,Value pair arguments.
For example, you can specify the number of principal components pca returns or an algorithm other than SVD to use.
example
[coeff,score,latent] = pca(___) also returns the principal component scores in score and the principal component variances in latent. You can use any of the input arguments in the previous syntaxes.
Principal component scores are the representations of X in the principal component space. Rows of score correspond to observations, and columns correspond to components.
The principal component variances are the eigenvalues of the covariance matrix of X.
example
[coeff,score,latent,tsquared] = pca(___) also returns the Hotelling's T-squared statistic for each observation in X.
example
[coeff,score,latent,tsquared,explained,mu] = pca(___) also returns explained, the percentage of the total variance explained by each principal component and mu, the estimated mean of each variable in X.
2. PCA 和SVD的不同是,他们分解矩阵的方式是不同的。我建议你翻看wikipedia里面SVD和PCA的说明,里面公式很清晰了追问
帮助文档我看了,还是没明白score和mu表示什么,我总觉得pca和svd是两种不同方法,pca中涉及svd的算法,所有我想弄不明白两者关系。
追答这本来就是两个方法,很接近也很相关
PCA:
T=XW
SVD:
T = USV
PCA得到的是特征举证
SVD得到的是分解的mod
这个pca是matlab自带的方法,答非所问
matlab自带princomp(PCA降维方式)
matlab 中自带的函数就不必怀疑。
princomp:principal componet analysis (PCA).
[COEFF,SCORE,latent,tsquare]=princomp(X);
参数:
%%%%%%%%%%%%%%%%%%
INPUT: X是数据:n*p,其中n代表样本个数,p代表特征维数
%%%%%%%%%%%%%%%%%%
OUTPUT:
COEFF: 协方差 p*p,投影矩阵
SCORE:投影之后的数据。如果样本个数<=特征维数,有一个有意思的
现象:SCORE(:,n:p), latent(n:p)都为零。为何呢?请以两个
数据点为例。即n=2,p=3;当选择了一个投影轴之后,再选一个
正交的抽,发现无论怎么选,它们投影之后都会重叠,即0。
latent:计算完之后并不是主成分归一化的权重。如果需要,用下面代码:
cumsum(latent)./sum(latent);
很注意的是:
训练样本计算出来了协方差矩阵。如果来了一个测试集,我们不能再去重新
计算一个协方差矩阵。因为那样会使训练集和测试集投影到不同的空间上,
最终导致特征空间不一致,训练出来的参数毫无意义。
以上是关于matlab中pca的主要内容,如果未能解决你的问题,请参考以下文章