PCA: найти собственные значения ковариационной матрицы: решение полинома степени N
Если я правильно понимаю, принцип PCA очень прост:
- вычислить ковариационную матрицу векторов данныхC .
- решить det (C - e * * * I) = 0, чтобы найти матрицу * * C собственных значений e.
- вычислить матрицуC собственных векторов (из этих собственных значений).
Первый: верно ли это описание?
Во-вторых: любой алгоритм машинного решения полиномиального уравнения det (C - e* * * I) = 0 ? Я понимаю, что это общий математический вопрос (нахождение корней многочлена степени **n).
В-третьих: существуют ли простые реализации PCA в C / C++
Большое спасибо.
2 ответа:
Во-первых, чтобы найти собственные значения, не нужно решать только что упомянутое уравнение. Существует такая вещь, как собственная композиция матрицы Во-вторых, ковариационная матрица является симметричной и положительной полуопределенной, поэтому собственная композиция для этой матрицы равнасингулярному разложению .
- для обеих упомянутых декомпозиций существует множество свободных и проприетарных реализаций (современная имплементация-это ЛАПАК ).
- существует множество библиотек, содержащих PCA. Если коммерческие реализации подходят, вы можете попробовать FinMath из RTMath или NMath из Centerpace (оба для .NET). в противном случае вы можете попробовать GSL или какую-либо другую библиотеку (есть несколько вопросов по StackOverflow, который содержит более полный список числовых библиотек).