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。

该方法解决了[Rf38c2b656ebc-1]_中描述的固定秩近似问题(问题(1.5),第5页)。

Parameters:
M{ndarray, sparse matrix}

要分解的矩阵。

n_componentsint

要提取的奇异值和奇异向量的数量。

n_oversamplesint, default=10

额外采样的随机向量数量,以确保 M 的范围适当条件化。用于找到 M 范围的随机向量总数为 n_components + n_oversamples 。较小的数量可以提高速度,但可能会负面影响奇异向量和奇异值近似的质量。用户可能希望将此参数增加到 2*k - n_components ,其中k是有效秩,对于大矩阵、噪声问题、谱线缓慢衰减的矩阵或提高精度准确性时。参见[Rf38c2b656ebc-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=01 甚至应该工作良好(参见[Rf38c2b656ebc-1]_第9页)。

Changed in version 0.18.

power_iteration_normalizer{‘auto’, ‘QR’, ‘LU’, ‘none’}, default=’auto’

幂迭代是否逐步进行QR分解(最慢但最准确)、’none’(最快但在 n_iter 较大时数值不稳定,例如通常为5或更大),或’LU’分解(数值稳定但可能会稍微损失精度)。’auto’模式在 n_iter <= 2时不进行归一化,否则切换到LU。

Added in version 0.18.

transposebool or ‘auto’, default=’auto’

是否将算法应用于M.T而不是M。结果应该大致相同。’auto’模式在M.shape[1] > M.shape[0]时触发转置,因为这种随机SVD实现在这种情况下往往稍快一些。

Changed in version 0.18.

flip_signbool, default=True

奇异值分解的输出仅在奇异向量的符号排列上唯一。如果 flip_sign 设置为 True ,通过使左奇异向量中每个分量的最大载荷为正来解决符号模糊问题。

random_stateint, RandomState instance or None, default=’warn’

用于洗牌数据的伪随机数生成器的种子,即获取用于初始化算法的随机向量。传递一个int以在多次函数调用中获得可重复的结果。参见:term:Glossary <random_state>

Changed in version 1.2: 默认值从0变为None。

svd_lapack_driver{“gesdd”, “gesvd”}, default=”gesdd”

是否使用更有效的分治法( "gesdd" )或更通用的矩形法( "gesvd" )来计算矩阵B的SVD,B是M在低维子空间中的投影,如[Rf38c2b656ebc-1]_中所述。

Added in version 1.2.

Returns:
undarray of shape (n_samples, n_components)

具有符号翻转的左奇异向量的酉矩阵。

sndarray of shape (n_components,)

奇异值,按非递增顺序排序。

vhndarray of shape (n_components, n_features)

具有符号翻转的右奇异向量的酉矩阵。

Notes

该算法通过随机化加速计算,找到一个(通常非常好)近似的截断奇异值分解。在您希望仅提取少量分量的大型矩阵上,它特别快速。为了进一步加速,可以将 n_iter 设置为<=2(以损失精度为代价)。为了提高精度,建议增加 n_oversamples ,最多到 2*k-n_components ,其中k是有效秩。通常,选择 n_components 大于k,因此增加 n_oversamplesn_components 应该足够。

References

[2]

A randomized algorithm for the decomposition of matrices Per-Gunnar Martinsson, Vladimir Rokhlin and Mark Tygert

[3]

An implementation of a randomized algorithm for principal component analysis A. Szlam et al. 2014

Examples

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