如何在scikit中扩展大规模数据学习



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

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

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

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

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

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

对于这种大小的数据,我建议使用apachespark。

最新更新