TruncatedSVD и randomized_svd из sklearn дают другую матрицу UPython

Программы на Python
Ответить
Anonymous
 TruncatedSVD и randomized_svd из sklearn дают другую матрицу U

Сообщение Anonymous »

Недавно я столкнулся со следующей дилеммой при использовании двух реализаций sklearn:
Предположим, у меня есть массив 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)
2. Я использую TruncatedSVD из sklearn.decomposition, следуя ответам на этот пост: Получите матрицу U, Sigma, V* из Truncated SVD в scikit-learn. Поскольку svd.fit_transform дает , нам придется разделить на Σ, заданный svd.singular_values_:

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

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_
U1 и U2 будут иметь одинаковую форму, т. е. (p, 10), как ожидалось, но когда я анализирую результаты, я обнаруживаю, что они не совпадают. Ниже я прикрепляю несколько графиков для визуализации двух результатов и прямой разницы между ними [StackOverflow не позволяет мне прикреплять изображения напрямую, поэтому используйте ссылку].
Примечание: В моей реализации я использовал входной массив A формы (200, 841).
U1, U2, Различия
Итак, мой вопрос: почему два метода дают разные результаты, разве они не должны быть одинаковыми? Если перейти к реализации Truncated_SVD, то можно понять, что алгоритм по умолчанию, который он использует, — это radomized_svd, и если я даже установлю одинаковое количество итераций, я все равно получу разные результаты. Какой вариант будет наиболее правильным?

Подробнее здесь: https://stackoverflow.com/questions/792 ... t-matrix-u
Ответить

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

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

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

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

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