2

有谁知道如何在 matlab 中的 m×n 矩阵上实现主成分分析(PCA)以进行归一化?

4

1 回答 1

4

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

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

那么你想对1/size(Amm,2)*Amm*Amm'(如果你想要一个无偏协方差矩阵的interpetation,你可以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 向量。的条目与as的条目相关。dsqrt

注意:如果m是巨大的,还有另一种方法,即计算eig(1/size(Amm,2)*Amm '*Amm);(注意与上面相比的转置切换)并做一些小技巧,但这是一个更长的解释,所以我不会进入它。

于 2011-10-20T02:35:34.587 回答