2012-01-03 3 views
3

次の多項式を解く:PCA:共分散行列の固有値を探す:私が正しく理解していれば、PCAの原理は非常に単純であるN

  1. 計算データベクトル共分散行列C電子行列** Cの固有値を見つけるために、= 0、 -
  2. はDET(電子*** I C)を解きます。
  3. 計算行列の固有ベクトル(それらの固有値からのもの)。

FIRST:この説明は正しいですか?

SECOND:多項式のDETのマシン解決のための任意のアルゴリズム(C - E *** I)= 0? これは一般的な数学問題です(次数の多項式の根を見つけること** n)。 THIRD

がC/C++

おかげでPCAのいずれかの簡単な実装がずっとあります。

+0

質問の3つのうち2つは、このサイトの対象外です。最初の2つの質問を他の場所で尋ねて、この質問をPCAの実装に限定することを検討することをお勧めします。 –

+0

固有方程式を求める根で固有値を解くことはできません。あなたの問題が大きくなるにつれてそれはうまくいかないでしょう。ジョブ用に設計された固有値ソルバーを使用します。 –

答えて

2
  1. まず、固有値を見つけるために、今述べた式を解く必要はありません。 eigendecomposition of a matrix
  2. 第2に、共分散行列は対称で正の半定理であるため、この行列の固有値分解はsingular value decompositionに等しくなります。
  3. 上記の両方の分解に関して、多くの無料かつ独自仕様の実装があります(最先端の実装はLAPACKです)。
  4. PCAを含むライブラリが多数あります。商用実装が適している場合は、FinMath from RTMathまたはNMath from CenterSpace(両方とも.NET用)を試すことができます。それ以外の場合は、GSLやその他のライブラリを試すことができます(StackOverflowには、数値ライブラリの完全なリストがいくつかあります)。
2

Gnu Science Library(gsl)を調べるとよいでしょう。それは固有値発見関数を提供する。固有値の発見は反復的な数値演算であることに注意してください。すなわちそれは正確ではなく、高価である。私はgslがQRアルゴリズムと呼ばれるものを使用していると信じています。