正規化のためにmatlabのm行n列の行列に主成分分析(PCA)を実装する方法を知っている人はいますか?
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');
そして、の列はv
PCAベクトルになります。のエントリはd
、対応する「分散」になります。
ただし、あなたが巨大な場合、保存は実用的ではないm
ため、これは最善の方法ではありません。Amm*Amm'
代わりに計算したい:
[u,s,v] = svd(1/sqrt(size(Amm,2))*Amm,'econ');
今回u
はPCAベクトルが含まれています。のエントリは、によってs
のエントリに関連しています。d
sqrt
m
注:巨大な場合は別の方法があります。つまり、コンピューティングeig(1/size(Amm,2)*Amm
'*Amm);
(上記と比較して転置の切り替えに注意)とちょっとしたトリックを行うことですが、説明が長いので、ここでは説明しません。
于 2011-10-20T02:35:34.587 に答える