有谁知道如何在 matlab 中的 m×n 矩阵上实现主成分分析(PCA)以进行归一化?
问问题
467 次
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
的条目相关。d
sqrt
注意:如果m
是巨大的,还有另一种方法,即计算eig(1/size(Amm,2)*Amm
'*Amm);
(注意与上面相比的转置切换)并做一些小技巧,但这是一个更长的解释,所以我不会进入它。
于 2011-10-20T02:35:34.587 回答