randomized_svd#

sklearn.utils.extmath.randomized_svd(M, n_components, *, n_oversamples=10, n_iter='auto', power_iteration_normalizer='auto', транспонирование='auto', flip_sign=True, random_state=None, svd_lapack_driver='gesdd')[источник]#

Вычислить усечённое рандомизированное SVD.

Этот метод решает задачу аппроксимации фиксированного ранга, описанную в [1] (задача (1.5), стр. 5).

См. Главный собственный вектор Википедии для типичного примера, где алгоритм степенного итерации используется для ранжирования веб-страниц. Этот алгоритм также известен как строительный блок в алгоритме PageRank Google.

Параметры:
M{array-like, sparse matrix} формы (n_samples, n_features)

Матрица для разложения.

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.

транспонированиеbool или 'auto', по умолчанию='auto'

Следует ли применять алгоритм к M.T вместо M. Результат должен быть примерно таким же. Режим 'auto' будет запускать транспонирование, если M.shape[1] > M.shape[0], поскольку эта реализация рандомизированного SVD имеет тенденцию быть немного быстрее в этом случае.

Изменено в версии 0.18.

flip_signbool, по умолчанию=True

Результат сингулярного разложения уникален только с точностью до перестановки знаков сингулярных векторов. Если flip_sign установлено в True, неоднозначность знака разрешается путем придания наибольших нагрузок для каждого компонента в левых сингулярных векторах положительными.

random_stateint, экземпляр RandomState или None, default='warn'

Сид псевдослучайного генератора чисел для использования при перемешивании данных, т.е. получения случайных векторов для инициализации алгоритма. Передайте int для воспроизводимых результатов при нескольких вызовах функции. См. Глоссарий.

Изменено в версии 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 Должен ли признак состоять из n-грамм слов или символов. n_components выбирается больше, чем k, поэтому увеличение n_oversamples до n_components должно быть достаточно.

Ссылки

Примеры

>>> 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))