Я пытаюсь выяснить различия между PCA с использованием разложения по сингулярным значениям в отличие от PCA с использованием Eigenvector-Decomposition.
Изобразите следующую матрицу:
B = np.array([ [1, 2],
[3, 4],
[5, 6] ])
При вычислении PCA этой матрицы B, используя собственный вектор-декомпозицию, мы выполняем следующие шаги:
- Центрируем данные (записи B), вычитая среднее значение столбца из каждого столбца
- Вычисляем ковариационную матрицу
C = Cov(B) = B^T * B / (m -1)
, где m = # строк B - Найти собственные векторы C
PCs = X * eigen_vecs
При вычислении PCA матрицы B с использованием SVD , мы следуем этим шагам:
- Вычислить SVD B:
B = U * Sigma * V.T
PCs = U * Sigma
Я сделал оба для данной матрицы.
При разложении по собственному вектору я получаю этот результат:
[[-2.82842712 0. ]
[ 0. 0. ]
[ 2.82842712 0. ]]
При использовании SVD получаю следующий результат:
[[-2.18941839 0.45436451]
[-4.99846626 0.12383458]
[-7.80751414 -0.20669536]]
Результат, полученный при разложении по собственному вектору, является результатом дано как решение. Итак, почему результат, полученный с SVD отличается?
Я знаю, что: C = Cov(B) = V * (Sigma^2)/(m-1)) * V.T
, и я чувствую, что это может быть связано с тем, почему эти два результата различны. По-прежнему. Кто-нибудь может помочь мне лучше понять?