如何在scikit-learn中扩展大规模数据?

时间:2016-05-18 15:52:47

标签: scikit-learn

整个数据集有80百万个样本,每个样本都有200个密集特征。我们经常使用批处理训练分类器。例如,我们采用clf = sklearn.linear_model.SGDClassifier,然后我们可以使用clf.partial_fit(batch_data, batch_y)使模型适合批处理数据。

在此之前,我们应该首先缩放batch_data。假设我们使用mean-std规范化。因此,我们应该获得每个要素维度的全局均值和标准差。之后,我们可以使用全局均值和stds来缩放batch_data。

现在问题是如何获得整个数据集的mean和std。要计算全局std,我们可以使用$ \ sigma ^ 2 = E(X ^ 2) - E(X)^ 2 $。然后我们应该通过批处理来计算E(X^2)E(X)

我认为HadoopSpark可能适合此任务。对于每批数据,我们可以启动一个实例来计算部分E(X^2)E(X),然后将它们缩减为全局数据。

scikit-learn中,有没有更有效的方法来扩展大数据集?也许我们可以使用multithreading或启动多进程来处理批处理数据,然后减少结果以获得全局均值和标准。

1 个答案:

答案 0 :(得分:1)

您可以使用大多数n_jobs算法中提供的scikit-learn选项进行并行处理。

对于这个大小的数据,我建议使用apache spark。