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

Kye*_*pil 3 dimension-reduction svd scikit-learn

我将术语文档矩阵的大小为30000 x 40000的truncatedSVD缩小为3000维,使用“随机化”时,使用“ arpack”时,方差比约为0.5(n_iter = 10),方差比约为0.9

“随机化”算法的方差比低于“ arpack”之一。

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

Mat*_*use 5

速度!

根据docssklearn.decomposition.TruncatedSVD由于Halko,Martinson和Tropp(2009)的缘故,可以使用随机算法本文声称他们的算法要快得多。

对于密集矩阵,它以O(m * n * log(k))的时间运行,而经典算法需要O(m * n * k)的时间,其中m和n是您要从中获取矩阵的维数第k大组件。随机算法也更容易有效地并行化,并且对数据的传递较少。

本文的表7.1(第45页)显示了几种算法的性能与矩阵大小和组件数量的关系,而随机算法通常快一个数量级。

尽管有一些修改和常量可能会影响输出的准确性,但据称输出的准确性也很好(图7.5),而且我还没有通过sklearn代码来查看它们做了/没做过的事情。