LINUX.ORG.RU

Вычисление собственных векторов в pca

 , ,


0

1

Собственно мое понимание PCA. У исходной матрицы А - колонки - это измерения, строки - это наблюдения/эсперименты Считаем ковариационную матрицу - А' * A вычесть среднее. Потом у ковариационной матрицы находим нужное кол-во собственных векторов - они и будут главными компонентами.
Но при попытке разобраться в opencv-шной реализации PCA меня ждал сюрприз. Допустим, что у нас матрица 2х10000. Т е явно хочется снизить размерность. Если мы посчитаем A' * A - то получиться вычисление ковариационки - 10000 х 10000, что over 9000. Отчаянные парни из opencv делают следующее. Они умножают A * A' , получают ковариационку - 2 х 2. Считают её собственные вектора, которые имеют размерность 2 и их 2 штука. (упаковывают их в матрицу 2х2 - eigenvectors). Потом они считают вектор средних для А, который будет иметь размерность 1 х 10000. Потом дублируют его как строку столько раз, сколько строк в матрице изначальной (ну и получают размерность, как изначальная матрица) - назовём её mean_mat. И потом происходит следующий финт, даже не ушами, а чем-то похлеще. Eigenvectors = Eigenvectors' * mean_mat. В итоге получается матрица 2 * 10000. Как я понимаю - это 2 «собственных» вектора по 10000 каждый. Т е по крайней мере размер векторов получается такой, как если бы они изначально ковариационку правильно посчитали - A' * A. Только вот почему эти ребята имеют право так поступать? Есть у этого алгоритма ловкого вычисления собственных векторов имя? И почему его не используют в lda реализации из opencv (там честно считают ков. матрицы 10000 х 10000).

★★★

Последнее исправление: LIKAN (всего исправлений: 1)

2х10000 или 10000х2 абсолютно одинаково — то что в первом случае scores станет loading и наоборот :)

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Эмм, поясните. Ну и собственно главное, что за алгоритм такой, помножил левые сингулярные вектора матрицы на какое-то там среднее и получил подобие собственных векторов.

LIKAN ★★★
() автор топика
Ответ на: комментарий от LIKAN

Все «ковариационки» чисто виртуальное явление в PCA (никакой логики от того что это «ковариационка» не следует), это простое геометрическое преобразование исходных данных. А все «ковариационки» просто частный случай когда хочется что то «вывести». И проводить PCA в виде 2x10000 или 10000x2 всё равно (если средние не вычитали или не стандартизировали на среднеквадратичное отклонение).

Вот как простые вектора и рассматривайте.

psv1967 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.