主成分分析m-by-n矩阵实现

时间:2011-10-20 01:05:36

标签: algorithm matlab normalization pca

有没有人知道如何在matlab中的m-by-n矩阵上实现主成分分析(PCA)以进行规范化?

1 个答案:

答案 0 :(得分:4)

假设每列都是一个样本(也就是说,每个维n都有m个样本),并且它存储在矩阵A中,您首先必须减去该列的意思是:

      Amm = bsxfun(@minus,A,mean(A,2));

然后你想在1/size(Amm,2)*Amm*Amm'上做一个特征值分解(你可以使用1/(size(Amm,2)-1)作为比例因子,如果你想要一个无偏协方差矩阵的插值):

      [v,d] = eig(1/size(Amm,2)*Amm*Amm');

v的列将成为您的PCA向量。 d的条目将是您对应的“差异”。

但是,如果您的m很大,那么这不是最好的方法,因为存储Amm*Amm'是不切实际的。你想要计算:

      [u,s,v] = svd(1/sqrt(size(Amm,2))*Amm,'econ');

这次u包含您的PCA向量。 s的条目与d的{​​{1}}条目相关。

注意:如果sqrt很大,还有另一种方法可以去,即计算m(注意与上面相比转换转置)并做一点诡计,但这是一个更长的解释所以我不会进入它。