PCA: Найти собственные значения ковариационной матрицы: решение полинома степени N - PullRequest
3 голосов
/ 03 января 2012

Если я правильно понимаю, принцип PCA очень прост:

  1. Рассчитать ковариационную матрицу векторов данных C .
  2. Решить, дет
  3. Рассчитать матрицу C собственных векторов (из этих собственных значений).

FIRST: Это описание верно?

ВТОРОЙ: Любой алгоритм для машинного решения полиномиального уравнения det ( C - e *** I) = 0? Я понимаю, что это общий математический вопрос (поиск корней многочлена степени ** n ).

THIRD: Существуют ли простые реализации PCA на C / C ++

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 04 января 2012
  1. Прежде всего, чтобы найти собственные значения, не нужно решать уравнение, которое вы только что упомянули.Существует такая вещь, как собственное разложение матрицы
  2. Во-вторых, ковариационная матрица симметрична и положительно полуопределена, поэтому собственное разложение для этой матрицы равно разложение по сингулярному значению .
  3. Для обеих упомянутых декомпозиций существует множество бесплатных и проприетарных реализаций (современный уровень реализации LAPACK ).
  4. Существует множество библиотеккоторый содержит PCA.Если коммерческие реализации подходят, вы можете попробовать FinMath из RTMath или NMath из CenterSpace (оба для .NET).В противном случае вы можете попробовать GSL или какую-либо другую библиотеку (есть несколько вопросов о StackOverflow, который содержит более полный список числовых библиотек).
2 голосов
/ 04 января 2012

Возможно, вы захотите заглянуть в Научную библиотеку Гну (gsl).Он обеспечивает функции поиска собственных значений.Осторожно, поиск собственных значений - это итеративная числовая операция;т.е. это не точно, а дорого.Я считаю, что gsl использует так называемый алгоритм QR.

...