Python: реализация PCA с использованием SVDPython

Программы на Python
Ответить
Anonymous
 Python: реализация PCA с использованием SVD

Сообщение Anonymous »

Я пытаюсь выяснить различия между PCA с использованием разложения по сингулярным значениям и PCA с использованием разложения по собственным векторам.

Представьте себе следующую матрицу:

Код: Выделить всё

 B = np.array([          [1, 2],
[3, 4],
[5, 6] ])
При вычислении PCA этой матрицы B с использованием разложения по собственному вектору мы выполняем следующие шаги:
  • Центрируйте данные (записи B), вычитая среднее значение столбца из каждого столбца.
  • Вычислите ковариационную матрицу C = Cov(B) = B^T * B / (м -1), где м = # строк B
  • Найти собственные векторы C
  • Код: Выделить всё

    PCs = X * eigen_vecs
При вычислении PCA матрицы B с использованием SVD мы выполняем следующие шаги:
Я сделал и то, и другое для данной матрицы.

С помощью разложения по собственному вектору я получаю следующий результат:

Код: Выделить всё

[[-2.82842712  0.        ]
[ 0.          0.        ]
[ 2.82842712  0.        ]]
С помощью SVD я получаю такой результат:

Код: Выделить всё

[[-2.18941839  0.45436451]
[-4.99846626  0.12383458]
[-7.80751414 -0.20669536]]
Результат, полученный с помощью разложения по собственным векторам, является результатом, представленным в виде решения. Так почему же результат, полученный с помощью СВД, отличается?

Я знаю, что: C = Cov(B) = V * (Sigma^2)/(m-1)) * V.T и у меня есть ощущение, что это может быть связано с тем, почему эти два результата различны. Все еще. Может ли кто-нибудь помочь мне лучше понять?

Подробнее здесь: https://stackoverflow.com/questions/605 ... -using-svd
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»