Scikit learn 为什么scikit学习截断SVD使用';随机';默认算法?

Scikit learn 为什么scikit学习截断SVD使用';随机';默认算法?,scikit-learn,svd,dimension-reduction,Scikit Learn,Svd,Dimension Reduction,我使用了具有30000×40000大小的术语文档矩阵的截断SVD,将维度减少到3000维, 使用“随机化”时,方差比约为0.5(n_iter=10) 使用“arpack”时,方差比约为0.9 “随机化”算法的方差比“arpack”算法的方差比低 那么为什么scikit learn truncatedSVD默认使用“随机化”算法呢?速度 根据sklearn.decomposition.TruncatedSVD可以使用随机算法,因为本文声称他们的算法要快得多 对于稠密矩阵,它在O(m*n*log(k

我使用了具有30000×40000大小的术语文档矩阵的截断SVD,将维度减少到3000维, 使用“随机化”时,方差比约为0.5(n_iter=10) 使用“arpack”时,方差比约为0.9

“随机化”算法的方差比“arpack”算法的方差比低

那么为什么scikit learn truncatedSVD默认使用“随机化”算法呢?

速度

根据sklearn.decomposition.TruncatedSVD可以使用随机算法,因为本文声称他们的算法要快得多

对于稠密矩阵,它在O(m*n*log(k))时间内运行,而经典算法需要O(m*n*k)时间,其中m和n是矩阵的维数,您需要从中获得第k个最大分量。随机化算法也更容易有效地并行化,并减少了对数据的传递

论文的表7.1(第45页)显示了一些算法的性能,它们是矩阵大小和分量的函数,随机算法通常快一个数量级

输出的准确性也被认为是相当好的(图7.5),尽管有一些修改和常量可能会影响它,我还没有通过sklearn代码查看它们做了什么/没有做什么