为什么scikit-learn truncatedSVD使用'随机化'算法是默认的吗?

时间:2016-04-23 14:34:26

标签: scikit-learn svd dimension-reduction

我使用truncatedSVD和30000 x 40000大小的term-document矩阵将尺寸减小到3000维, 当使用' randomized'时,方差比约为0.5(n_iter = 10) 当使用' arpack'时,方差比约为0.9

随机化的方差比'算法低于' arpack'。

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

1 个答案:

答案 0 :(得分:5)

速度!

根据docs,由于Halko, Martinson, and Tropp (2009).sklearn.decomposition.TruncatedSVD可以使用随机算法。本文声称他们的算法速度要快得多。

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

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

输出的准确性也声称非常好(图7.5),虽然有一些修改和常量可能会影响它,但我还没有通过sklearn代码看看他们做了什么/做了什么不行。