【问题标题】:Iteratively training an algorithm in scikit-learn在 scikit-learn 中迭代训练算法
【发布时间】:2016-07-15 07:05:41
【问题描述】:

我有一个数据集,当将其提供给 scikit-learn 中的 RandomForestClassifier 算法时,会导致算法 tu 内存不足。我正在使用 pandas 数据框来加载数据。有没有办法让我可以迭代地训练算法,即我将数据分成十个部分并在所有部分上训练算法以完成对数据集的训练。这可能吗?

编辑完整的追溯

Traceback (most recent call last):
  File "F:\major\solution-1.py", line 234, in <module>
    prep_data()
  File "F:\major\solution-1.py", line 160, in prep_data
    selector.fit(data[predictors], data['ED2'])
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 1963, in __getitem__
    return self._getitem_array(key)
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2008, in _getitem_array
    return self.take(indexer, axis=1, convert=True)
  File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 1368, in take
    self._consolidate_inplace()
  File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 2411, in _consolidate_inplace
    self._protect_consolidate(f)
  File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 2402, in _protect_consolidate
    result = f()
  File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 2410, in f
    self._data = self._data.consolidate()
  File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 3194, in consolidate
    bm._consolidate_inplace()
  File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 3199, in _consolidate_inplace
    self.blocks = tuple(_consolidate(self.blocks))
  File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 4189, in _consolidate
    _can_consolidate=_can_consolidate)
  File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 4212, in _merge_blocks
    new_values = new_values[argsort]
MemoryError

【问题讨论】:

  • 你的数据有多大?
  • 200,000 行和 337 列...
  • 您是否尝试过将 RandomForestClassifier 应用于您的数据的一个非常小的子集?您没有打印实际错误。如果数据适合您的 RAM,如果您不使用大量树,它应该可以工作。
  • 是的,我有,它确实适用于数据子集。编辑问题以包含整个回溯。
  • 你的 RandomForestClassifier 的参数是什么?

标签: python python-2.7 pandas scikit-learn


【解决方案1】:

尝试将您的数据保存在 csv 文件中以了解它有多大。我们会说这个数量是D
N 将是您用于创建 RandomForestClassifier 的树的数量。
RandomForest 会为您的数据创建 N 个引导程序,因此它会创建 DxN 的新数据。
如果 DxN 比您的 RAM,是的,您遇到了问题,因为您使用的是 sklearn。

您可能想在集成模型之前使用单一模型

【讨论】:

    【解决方案2】:

    是的,您可以迭代训练数据,使用交叉验证对数据进行切片,其代码在 emanuele 编写的链接中提供。 https://github.com/emanuele/kaggle_pbr/blob/master/blend.py

    有关集成的更多参考,请查看此链接。 http://mlwave.com/kaggle-ensembling-guide/

    我对内存错误了解不多,但我可以说数据不适合您的 ram。先尝试数据子集,然后再完整。

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 2016-11-26
      • 2017-12-07
      • 2016-11-02
      • 2022-01-05
      • 2014-10-13
      • 2014-09-17
      • 2015-10-14
      • 2017-04-16
      相关资源
      最近更新 更多