有人知道如何在Matlab中对M乘N矩阵进行主成分分析(PCA)以实现标准化吗?
最佳答案
假设每一列都是一个样本(也就是说,每个维度都有n
个样本),并且它存储在一个矩阵m
中,您首先必须减去列的意思是:
Amm = bsxfun(@minus,A,mean(A,2));
然后,您想对
A
进行特征值分解(如果您想将插值作为无偏协方差矩阵,可以使用1/size(Amm,2)*Amm*Amm'
作为比例因子),其中: [v,d] = eig(1/size(Amm,2)*Amm*Amm');
1/(size(Amm,2)-1)
的列将成为PCA向量v
的条目将是相应的“方差”。但是,如果
d
很大,那么这不是最好的方法,因为存储m
不实用您需要计算: [u,s,v] = svd(1/sqrt(size(Amm,2))*Amm,'econ');
这次
Amm*Amm'
包含您的PCA向量u
的条目与as
的d
条目相关。注意:如果
sqrt
是巨大的,还有另一条路要走,即计算m
(注意与上面相比转置的切换)和做一点小把戏,但这是一个较长的解释,所以我不会进入它。