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должно быть достаточно.Ссылки
[1] (1,2,3,4)«Поиск структуры с помощью случайности: Стохастические алгоритмы построения приближенных матричных разложений» Halko и др. (2009)
[2]«Рандомизированный алгоритм для разложения матриц» Пер-Гуннар Мартинссон, Владимир Рохлин и Марк Тайгерт (2011)
[3]“An implementation of a randomized algorithm for principal component analysis” A. Szlam et al. (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))