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')[исходный код]
-
Вычисляет усечённое рандомизированное разложение SVD.
Этот метод решает задачу аппроксимации фиксированного ранга, описанную в [1] (задача (1.5), стр. 5).
См. Главный собственный вектор Википедии — типичный пример применения алгоритма степенных итераций для ранжирования веб-страниц. Известно также, что этот алгоритм используется как базовый компонент алгоритма PageRank компании Google.
- Параметры:
-
- M{array-like, sparse matrix} of shape (n_samples, n_features)
-
Матрица для разложения.
- n_componentsint
-
Количество извлекаемых сингулярных значений и векторов.
- n_oversamplesint, default=10
-
Дополнительное количество случайных векторов для выборки образа
M, необходимое для обеспечения надлежащей обусловленности. Общее количество случайных векторов, используемых для определения образаM, равноn_components + n_oversamples. Меньшее значение может повысить скорость, но отрицательно сказаться на качестве аппроксимации сингулярных векторов и значений. Для больших матриц, зашумлённых задач, матриц с медленно убывающими спектрами или для повышения точности пользователям может понадобиться увеличить этот параметр до2*k - n_components, где k — эффективный ранг. См. [1] (стр. 5, 23 и 26). - n_iterint or ‘auto’, default=’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’}, default=’auto’
-
Способ нормализации степенных итераций: пошаговая факторизация QR (самая медленная, но наиболее точная), ‘none’ (самый быстрый способ, но численно неустойчивый при большом значении
n_iter, например обычно равном 5 или больше) или факторизация LU (численно устойчивая, но может немного снизить точность). В режиме ‘auto’ нормализация не выполняется, еслиn_iter<= 2, и в противном случае используется LU.Добавлено в версии 0.18.
- transposebool or ‘auto’, default=’auto’
-
Следует ли применять алгоритм к M.T вместо M. Результаты должны быть примерно одинаковыми. Режим ‘auto’ включает транспонирование, если M.shape[1] > M.shape[0], поскольку в этом случае данная реализация рандомизированного SVD обычно работает немного быстрее.
Изменено в версии 0.18.
- flip_signbool, default=True
-
Результат сингулярного разложения определён с точностью до перестановки знаков сингулярных векторов. Если
flip_signустановлен вTrue, неоднозначность знака устраняется присвоением положительных значений наибольшим нагрузкам для каждой компоненты в левых сингулярных векторах. - random_stateint, RandomState instance or None, default=’warn’
-
Начальное значение генератора псевдослучайных чисел, используемого при перемешивании данных, то есть для получения случайных векторов, инициализирующих алгоритм. Передайте целое число, чтобы получать воспроизводимые результаты при нескольких вызовах функции. См. глоссарий.
Изменено в версии 1.2: значение по умолчанию изменено с 0 на None.
- svd_lapack_driver{“gesdd”, “gesvd”}, default=”gesdd”
-
Использовать ли более эффективный подход «разделяй и властвуй» (
"gesdd") или более общий прямоугольный подход ("gesvd") для вычисления SVD матрицы B, представляющей собой проекцию M на подпространство меньшей размерности, как описано в [1].Добавлено в версии 1.2.
- Возвращает:
-
- undarray of shape (n_samples, n_components)
-
Унитарная матрица, столбцами которой являются левые сингулярные векторы с изменёнными знаками.
- sndarray of shape (n_components,)
-
Сингулярные значения, отсортированные по невозрастанию.
- vhndarray of shape (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)«Поиск структуры с помощью случайности: стохастические алгоритмы построения приближённых разложений матриц» Halko и др. (2009)
[2]«Рандомизированный алгоритм разложения матриц» Per-Gunnar Martinsson, Vladimir Rokhlin и Mark Tygert (2011)
[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–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/generated/sklearn.utils.extmath.randomized_svd.html