整个数据集有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)
。
我认为Hadoop
或Spark
可能适合此任务。对于每批数据,我们可以启动一个实例来计算部分E(X^2)
和E(X)
,然后将它们缩减为全局数据。
在scikit-learn
中,有没有更有效的方法来扩展大数据集?也许我们可以使用multithreading
或启动多进程来处理批处理数据,然后减少结果以获得全局均值和标准。
答案 0 :(得分:1)
您可以使用大多数n_jobs
算法中提供的scikit-learn
选项进行并行处理。
对于这个大小的数据,我建议使用apache spark。