【问题标题】:Huge datasets in machine learning sklearn机器学习 sklearn 中的海量数据集
【发布时间】:2016-12-26 07:23:30
【问题描述】:

我有一个每天都在增长的数据集,我担心它很快就会达到内存可能无法容纳的大小。我在我的应用程序中使用随机森林分类器和回归器。我听说过部分拟合,但我不知道随机森林是否可以以这种方式完成。即使数据集超出内存大小,我如何确保应用程序不会中断并继续良好运行。如果使用 svm 而不是 random forest ,情况也会有所不同。

【问题讨论】:

  • 您的数据集有多大?你定义sklearn中的工作数量吗?请注意,有不同的优化方法。您始终可以使用不需要将完整的训练集加载到内存中的方法,而是使用批处理。采用随机梯度下降。
  • 是的,数据最终会变得太大,可能会达到 TB。另外我想知道随机森林是否仍然有效。

标签: python machine-learning scikit-learn training-data


【解决方案1】:

一般来说,您应该寻找提供增量在线培训的方法。在这种情况下,您不必立即向算法提供完整的数据集,而是在新数据可用时提供。如果数据每天都在增长并且您的计算资源有限,那么这一点至关重要。 Stochastic gradient descent 是一种非常流行的优化方法,可以满足您的要求。

您可以使用称为Mondarian Forest 的随机森林变体。引用链接论文的摘要:蒙德里安森林实现了与现有在线随机森林和定期重新训练的批量随机森林相媲美的具有竞争力的预测性能,同时速度快了一个数量级以上,因此代表了更好的计算 vs准确性权衡。代码可以在GitHub找到。

如果不了解您的数据和问题的性质,就不可能为您提供比随机森林更好的具体指导。如果你想坚持学习 scikit,请查看文章Strategies to scale computationally: bigger data

【讨论】:

    【解决方案2】:

    我建议你试试H2O。 H2O 是一个开源机器学习平台,公司可以在其中基于大型数据集(无需采样)构建模型并实现准确的预测。它非常快速、可扩展且易于在任何级别实施。

    H2O 具有直接将工具(R 或 Python)与机器的 CPU 连接起来的简洁明了的特性。通过这种方式,我们可以将更多的内存、处理能力传递给工具以进行更快的计算。这将允许计算以 100% 的 CPU 容量进行。也可以连接云平台上的集群进行计算。

    提供Regression、RandomForest、DeepLearning算法。

    访问网站了解更多信息:- http://www.h2o.ai/

    【讨论】:

    • 有没有办法让我坚持自己的平台而不是接触外部平台
    • H2O如何解决物理内存不足的问题?顺便说一句 - H2O 是一种开源软件,而不是任何类型的平台(比如 AWS)。
    • 还有一件事:用过H2O,没看懂这句话:“H2O有一个简洁明了的特性,直接把工具(R或者Python)和你机器的CPU连接起来。这样我们将更多的内存和处理能力引导到工具以进行更快的计算”。你让它听起来像是直接翻译成汇编代码,但事实并非如此。 H2O 是基于 JVM 的,所以实际上它是相当间接的,并且带有将上述 R / Python 代码转换为字节码的惩罚。
    猜你喜欢
    • 2018-03-29
    • 2018-11-27
    • 2019-06-13
    • 2016-09-19
    • 2016-04-20
    • 2017-04-20
    • 2016-05-25
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多