3

私が正しく理解していれば、PCAの原則は非常に単純です。

  1. データベクトルの共分散行列Cを計算します。
  2. det(C --e *** I)= 0を解いて、行列**Cの固有値eを見つけます。
  3. 行列Cの固有ベクトルを(それらの固有値から)計算します。

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

2番目:多項式方程式det( C --e *** I)= 0の機械解法のための任意のアルゴリズム?これは一般的な数学の質問であることを理解しています(次数** nの多項式の根を見つける)。

3番目: C /C++でのPCAの簡単な実装はありますか

どうもありがとう。

4

2 に答える 2

2
  1. まず、固有値を見つけるために、今述べた方程式を解く必要はありません。行列の固有分解などがあります
  2. 第2に、共分散行列は対称で正半定値であるため、この行列の固有分解は特異値分解に等しくなります。
  3. 上記の両方の分解には、無料の独自の実装がたくさんあります(最先端の実装はLAPACKです)。
  4. PCAを含むライブラリはたくさんあります。商用実装が適切な場合は、RTMathのFinMathまたはCenterSpaceのNMath(どちらも.NETの場合)を試すことができます。それ以外の場合は、 GSLまたは他のライブラリを試すことができます(数値ライブラリのより完全なリストを含むStackOverflowに関するいくつかの質問があります)。
于 2012-01-04T15:51:28.000 に答える
2

Gnu Science Library(gsl)を調べることをお勧めします。固有値検出関数を提供します。注意してください、固有値を見つけることは反復的な数値操作です。つまり、正確ではなく、高価です。gslはいわゆるQRアルゴリズムを使用していると思います。

于 2012-01-03T22:34:17.707 に答える