【问题标题】:Is scikit-learn suitable for big data tasks?scikit-learn 适合大数据任务吗?
【发布时间】:2013-06-05 18:06:26
【问题描述】:

我正在从事一项涉及使用机器学习技术的 TREC 任务,其中数据集包含超过 5 TB 的网络文档,计划从中提取词袋向量。 scikit-learn 有一套不错的功能,似乎符合我的需要,但我不知道它是否能很好地扩展以处理大数据。例如,HashingVectorizer 是否能够处理 5 TB 的文档,并行化是否可行?此外,对于大规模机器学习任务,还有哪些替代方案?

【问题讨论】:

  • 是的,scikit-learn 会给你最好的答案......逻辑回归也应该满足你的需求
  • 在 scikit-learn 中实现的 LogisticRegression 不适用于如此大的数据集:这是 liblinear 的包装器,需要在拟合之前将数据加载到内存中。
  • @ogrisel,sklearn 中的 LogisticRegression 使用二阶优化方法,因此不太适合大规模数据。 SGDClassifier 可能符合条件,但是如何在如此大规模的数据集上进行特征缩放?

标签: python machine-learning scikit-learn


【解决方案1】:

HashingVectorizer 将在您将数据迭代地分块成批量的 10k 或 100k 文档以适合内存的情况下工作。

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

您可以开始在保留的验证集(例如 10k 个文档)上对模型进行评分,以监控部分训练模型的准确性,而无需等待查看所有样本。

您也可以在数据分区上的多台机器上并行执行此操作,然后平均生成的 coef_intercept_ 属性以获得所有数据集的最终线性模型。

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

tutorial on paralyzing scikit-learn with IPython.parallel 中还有示例代码取自:https://github.com/ogrisel/parallel_ml_tutorial

【讨论】:

    猜你喜欢
    • 2021-08-23
    • 1970-01-01
    • 2015-10-12
    • 2021-11-22
    • 2016-04-22
    • 2018-05-26
    • 2017-11-09
    • 2015-10-25
    相关资源
    最近更新 更多