【发布时间】:2011-12-11 09:59:06
【问题描述】:
有谁知道如何在 matlab 中对 m×n 矩阵进行主成分分析 (PCA) 以进行归一化?
【问题讨论】:
标签: algorithm matlab normalization pca
有谁知道如何在 matlab 中对 m×n 矩阵进行主成分分析 (PCA) 以进行归一化?
【问题讨论】:
标签: algorithm matlab normalization pca
假设每一列都是一个样本(也就是说,你有 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 的条目通过sqrt 与d 的条目相关。
注意:如果m 很大,还有另一种方法,即计算eig(1/size(Amm,2)*Amm
'*Amm);(注意与上面相比的转置切换)并做一些小技巧,但这是一个更长的解释,所以我不会明白进入它。
【讨论】: