Spec-Zone.ru › scikit-learn

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API