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=0
或1
甚至应该工作良好(参见[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_oversamples
到n_components
应该足够。References
[1]“Finding structure with randomness: Stochastic algorithms for constructing approximate matrix decompositions” Halko, et al. (2009)
[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))