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'使用できます)。1/(size(Amm,2)-1)

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

そして、の列はvPCAベクトルになります。のエントリはd、対応する「分散」になります。

ただし、あなたが巨大な場合、保存は実用的ではないmため、これは最善の方法ではありません。Amm*Amm'代わりに計算したい:

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

今回uはPCAベクトルが含まれています。のエントリは、によってsのエントリに関連しています。dsqrt

m注:巨大な場合は別の方法があります。つまり、コンピューティングeig(1/size(Amm,2)*Amm '*Amm);(上記と比較して転置の切り替えに注意)とちょっとしたトリックを行うことですが、説明が長いので、ここでは説明しません。

于 2011-10-20T02:35:34.587 に答える