sklearn.utils.extmath.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=0)

源码

计算截断的随机SVD

参数 说明
M ndarray or sparse matrix
分解矩阵
n_components int
要提取的奇异值和向量的数量。
n_oversamples int (default is 10)
附加数量的随机向量可对M的范围进行采样,以确保适当的条件。 用于查找M范围的随机向量总数为n_components + n_oversamples。 较小的数字可以提高速度,但会对奇异矢量和奇异值的近似质量产生负面影响。
n_iter int or ‘auto’ (default is ‘auto’)
幂次迭代的次数。它可以用来处理非常嘈杂的问题。如果设为“ auto”,则将其设置为4,除非n_components很小(<.1 * min(X.shape)),n_iter在这种情况下设置为7。这样就可以减少零件数量,从而提高精度。
power_iteration_normalizer ‘auto’ (default), ‘QR’, ‘LU’, ‘none’
设置幂次迭代是否通过逐步QR因子分解(最慢但最准确)归一化,设置为none(当n iter较大时最快但数值不稳定,例如5或更大),或LU因子分解(数值稳定但精度会稍微下降)。如果n iter <= 2,则自动模式不应用归一化,否则切换到LU。
新版本0.18的功能。
transpose True, False or ‘auto’ (default)
是否应将算法应用于M.T而不是M。结果应大致相同。 如果M.shape [1]> M.shape [0],则“自动”模式将触发换位,因为在这种情况下,随机化SVD的实现往往会更快一些。
在版本0.18中进行了更改。
flip_sign boolean, (True by default)
奇异值分解的输出仅在奇异矢量的符号置换之前是唯一的。 如果将flip_sign设置为True,则通过使左奇异矢量中每个分量的最大负载为正来解决符号的不确定性。
random_state int, RandomState instance or None, optional (default=None)
伪随机数生成器的种子在对数据进行混洗时使用,即获取随机向量从而初始化算法。 在多个函数调用中传递可重复的结果。 请参阅词汇表

:

该算法利用随机化方法找到(通常很好的)近似截断奇异值分解,以加快计算速度。当您希望只提取少量成分的大型矩阵时,它的速度特别快。为了进一步提高速度,可以将n iter设为<=2(以牺牲精度为代价)。

参考:

1 寻找具有随机性的结构:用于构造近似矩阵分解的随机算法 Halko等,2009 https://arxiv.org/abs/0909.4061

2 矩阵分解的随机算法Per-Gunnar Martinsson,Vladimir Rokhlin和Mark Tygert

3 主成分分析的随机算法的一种实现方法A. Szlam等。 2014年