randomized_svd
- sklearn.utils.extmath.randomized_svd(M, n_components, *, n_oversamples=10, n_iter='auto', power_iteration_normalizer='auto', transpose='auto', flip_sign=True, random_state=None, svd_lapack_driver='gesdd')[source]
-
Вычисление усечённого случайного SVD.
Этот метод решает проблему аппроксимации фиксированного ранга, описанную в [1] (проблема (1.5), стр. 5).
Обратитесь к Главный собственный вектор Википедии для примера типичного использования алгоритма итераций степени для ранжирования веб-страниц. Этот алгоритм также известен как часть алгоритма PageRank Google.
- Параметры:
-
- M{ndarray, разреженная матрица}
-
Матрица для разложения.
- n_componentsint
-
Количество сингулярных значений и векторов для извлечения.
- n_oversamplesint, по умолчанию=10
-
Дополнительное количество случайных векторов для выборки диапазона
Mдля обеспечения надлежащей обусловленности. Общее количество случайных векторов, используемых для нахождения диапазонаM, равноn_components + n_oversamples. Меньшее число может улучшить скорость, но может негативно повлиять на качество аппроксимации сингулярных векторов и сингулярных значений. Пользователи могут пожелать увеличить этот параметр до2*k - n_components, где k — эффективный ранг, для больших матриц, шумных задач, матриц со медленно убывающими спектрами или для повышения точности. См. [1] (страницы 5, 23 и 26). - n_iterint или ‘auto’, по умолчанию=’auto’
-
Количество итераций степени. Его можно использовать для работы с очень шумными проблемами. При значении ‘auto’ оно устанавливается в 4, если
n_componentsневелико (< .1 * min(X.shape)), в этом случаеn_iterустанавливается в 7. Это повышает точность при небольшом количестве компонентов. Обратите внимание, что, как правило, пользователи должны сначала увеличитьn_oversamples, а затемn_iter, так как принцип случайного метода заключается в избегании использования более дорогостоящих этапов итераций степени. Когдаn_componentsравно или больше эффективного ранга матрицы, и спектр не демонстрирует медленное затухание,n_iter=0или1должны работать нормально теоретически (см. [1] страница 9).Изменено в версии 0.18.
- power_iteration_normalizer{‘auto’, ‘QR’, ‘LU’, ‘none’}, по умолчанию=’auto’
-
Нормализуются ли итерации степени с помощью пошаговой QR-факторизации (самый медленный, но наиболее точный), ‘none’ (самый быстрый, но численно нестабильный, когда
n_iterвелико, например, обычно 5 или больше), или LU-факторизации (численно стабильно, но может немного потерять в точности). Режим ‘auto’ не применяет нормализацию, еслиn_iter<= 2, и переключается на LU в противном случае.Добавлен в версии 0.18.
- transposebool или ‘auto’, по умолчанию=’auto’
-
Нужно ли применять алгоритм к M.T вместо M. Результат должен быть приблизительно одинаковым. Режим ‘auto’ вызовет транспонирование, если M.shape[1] > M.shape[0], поскольку это реализация случайного SVD, как правило, немного быстрее в этом случае.
Изменено в версии 0.18.
- flip_signbool, по умолчанию=True
-
Выход сингулярного разложения уникален только до перестановки знаков сингулярных векторов. Если
flip_signустановлено вTrue, неоднозначность знака разрешается путем присвоения наибольших нагрузок для каждого компонента в левых сингулярных векторах положительного значения. - random_stateint, RandomState instance или None, по умолчанию=’warn’
-
Семечко генератора псевдослучайных чисел, используемое при перемешивании данных, то есть получении случайных векторов для инициализации алгоритма. Передайте целое число для воспроизводимых результатов в нескольких вызовах функции. См. Глоссарий.
Изменено в версии 1.2: Значение по умолчанию изменено с 0 на None.
- svd_lapack_driver{“gesdd”, “gesvd”}, по умолчанию=”gesdd”
-
Использовать ли более эффективный подход «разделяй и властвуй» (
"gesdd") или более общий прямоугольный подход ("gesvd") для вычисления SVD матрицы B, которая является проекцией M в подпространство с низкой размерностью, как описано в [1].Добавлен в версии 1.2.
- Возвращает:
-
- undarray формы (n_samples, n_components)
-
Унитарная матрица, содержащая левые сингулярные векторы со знаками, изменёнными в качестве столбцов.
- sndarray формы (n_components,)
-
Сингулярные значения, отсортированные в порядке убывания.
- vhndarray формы (n_components, n_features)
-
Унитарная матрица, содержащая правые сингулярные векторы со знаками, изменёнными в качестве строк.
Примечания
Этот алгоритм находит (обычно очень хорошее) приближенное усечённое сингулярное разложение с использованием случайности для ускорения вычислений. Он особенно быстрый для больших матриц, на которых требуется извлечь только небольшое количество компонентов. Для дальнейшего ускорения
n_iterможно установить <=2 (за счёт потери точности). Для повышения точности рекомендуется увеличитьn_oversamples, до2*k-n_components, где k — эффективный ранг. Обычноn_componentsвыбирается больше, чем k, поэтому увеличениеn_oversamplesдоn_componentsдолжно быть достаточно.Ссылки
[1] (1,2,3,4)“Finding structure with randomness: Stochastic algorithms for constructing approximate matrix decompositions” Halko, et al. (2009)
[2]Случайный алгоритм для разложения матриц Per-Gunnar Martinsson, Владимир Рохлин и Марк Тайгерт
[3]Реализация случайного алгоритма для анализа главных компонент A. Szlam и др. 2014
Примеры
>>> import numpy as np >>> from sklearn.utils.extmath import randomized_svd >>> a = np.array([[1, 2, 3, 5], ... [3, 4, 5, 6], ... [7, 8, 9, 10]]) >>> U, s, Vh = randomized_svd(a, n_components=2, random_state=0) >>> U.shape, s.shape, Vh.shape ((3, 2), (2,), (2, 4))
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/modules/generated/sklearn.utils.extmath.randomized_svd.html