【问题标题】:Why scikit-learn truncatedSVD uses 'randomized' algorithm as default?为什么 scikit-learn truncatedSVD 默认使用“随机”算法?
【发布时间】:2016-08-17 03:57:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: scikit-learn svd dimension-reduction


    【解决方案1】:

    速度!

    根据docssklearn.decomposition.TruncatedSVD可以使用随机算法,因为Halko, Martinson, and Tropp (2009).这篇论文声称他们的算法要快得多。

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

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

    输出的准确性也声称非常好(图 7.5),尽管有一些修改和常量可能会影响它,而且我还没有查看 sklearn 代码来查看它们做了什么/没做什么.

    【讨论】:

      猜你喜欢
      • 2016-07-15
      • 2019-12-26
      • 2013-12-23
      • 2017-02-27
      • 2021-02-26
      • 2013-11-27
      • 2017-03-09
      • 2017-12-10
      • 1970-01-01
      相关资源
      最近更新 更多