Представьте себе следующую матрицу:
Код: Выделить всё
B = np.array([ [1, 2],
[3, 4],
[5, 6] ])
- Центрируйте данные (записи B), вычитая среднее значение столбца из каждого столбца.
- Вычислите ковариационную матрицу C = Cov(B) = B^T * B / (м -1), где м = # строк B
- Найти собственные векторы C
Код: Выделить всё
PCs = X * eigen_vecs
- Вычислить SVD B: B = U * Сигма * V.T
Код: Выделить всё
PCs = U * Sigma
С помощью разложения по собственному вектору я получаю следующий результат:
Код: Выделить всё
[[-2.82842712 0. ]
[ 0. 0. ]
[ 2.82842712 0. ]]
Код: Выделить всё
[[-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
Мобильная версия