scikit-learn适用于大数据任务吗?

23

我正在参与一个使用机器学习技术的TREC任务,数据集包含超过5TB的Web文档,计划提取词袋向量。 scikit-learn有一整套很好用的功能似乎适合我的需求,但我不知道它是否能够很好地扩展以处理大数据。例如,HashingVectorizer是否能够处理5TB的文档,并且是否可行并行化?此外,还有哪些大规模机器学习任务的替代方案存在?


2
是的,scikit-learn会给你最好的答案……逻辑回归也应该能满足你的需求。 - Ryan Saxe
4
在scikit-learn中实现的LogisticRegression无法处理如此大的数据集:它是liblinear的包装器,需要在拟合之前将数据加载到内存中。 - ogrisel
@ogrisel,sklearn中的LogisticRegression使用二阶优化方法,因此不适用于大规模数据。而SGDClassifier可能是合适的选择,但是如何在这样大规模的数据集上进行特征缩放呢? - avocado
1个回答

46

HashingVectorizer将会在你把数据分块并按批次处理时发挥作用,每个批次包含10k或100k篇文档,且这些文档能够适合内存。

然后你可以把转换后的文档批次传递给支持partial_fit方法的线性分类器(例如SGDClassifierPassiveAggressiveClassifier),然后迭代新的批次。

你可以开始在验证集(例如10k篇文档)上对模型进行评分,以便在训练过程中监测已经部分训练的模型的准确性,而不必等到看完所有样本。

你也可以在多台机器上并行处理数据分区,然后平均coef_intercept_属性得到整个数据集的最终线性模型。

我在2013年3月在PyData做的演讲中讨论了这个问题:http://vimeo.com/63269736

此外,还有示例代码在这个使用IPython.parallel实现scikit-learn的并行处理教程中,该代码来自于:https://github.com/ogrisel/parallel_ml_tutorial


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接