Предположим, у меня есть массив A формы (p, q), который я хочу разложить, используя усеченный SVD, скажем, для 10 первых компонентов. Моя цель — получить матрицу U в результате разложения UΣV'.
1. Я использую randomized_svd из sklearn.utils.extmath:
Код: Выделить всё
from sklearn.utils.extmath import randomized_svd
U1, _, _ = randomized_svd(A, n_components=10)
Код: Выделить всё
from sklearn.decomposition import TruncatedSVD
svd = TruncatedSVD(n_components=10)
transform = svd.fit_transform(A)
U2 = transform / svd.singular_values_ # Alternatively: svd.transform(A) / svd.singular_values_
Примечание: В моей реализации я использовал входной массив A формы (200, 841).
U1, U2, Различия
Итак, мой вопрос: почему два метода дают разные результаты, разве они не должны быть одинаковыми? Если перейти к реализации Truncated_SVD, то можно понять, что алгоритм по умолчанию, который он использует, — это radomized_svd, и если я даже установлю одинаковое количество итераций, я все равно получу разные результаты. Какой вариант будет наиболее правильным?
Подробнее здесь: https://stackoverflow.com/questions/792 ... t-matrix-u
Мобильная версия