【问题标题】:sklearn: fitting RandomForestClassifier or normilize data with chunks of datasklearn:拟合 RandomForestClassifier 或用数据块规范化数据
【发布时间】:2017-11-26 14:16:07
【问题描述】:

我有一个包含训练数据的大文件。我很担心,当我使用这段代码时:

clf = RandomForestClassifier()
for chunk in reader:
    clf.fit(chunk, target)

clf 会为所有块生成模型还是只为当前块生成模型?对于增量学习,我应该只使用带有 partial_fit() 方法的分类器吗?我应该如何以这种方式规范化训练数据(为整个数据构建规范化器,而不仅仅是当前块)?

【问题讨论】:

  • 在 scikit 中,对 fit() 的新调用将忘记之前的 fit()。所以它只会为最后一个fit() 制作模型。你需要partial_fit()。 scikit-learn.org/stable/modules/…
  • @VivekKumar 这是否也适用于 tfidf 矢量化器类?
  • @Coldspeed 否。如果数据太大,则 advised by the sklearn authors 使用 HashingVectorizer 代替。
  • 这不是一个简单的问题,构造函数中有warm_start参数,但是当你适应新的数据块时,会抛出“UserWarning:不增加n_estimators的热启动拟合不适合新树”。并且可以适应不同的森林,然后附加他们的估计器stackoverflow.com/questions/28489667/…,但我不确定这是否能正常工作。有人试过吗?

标签: python scikit-learn


【解决方案1】:

是的,这仅适用于带有partial_fit 的分类器;根据您的规范化方式,您可以逐块执行此操作(例如 scaling by a fixed factor 或执行 label encoding)。

【讨论】:

  • 您能写更多关于“按固定因子缩放或进行标签编码”的内容吗?一些简短的示例或要阅读的网址?
  • 我在非文本数据上训练模型
【解决方案2】:

是的,对于增量学习,您只能使用实现 partial_fit 的分类器。

StandardScaler有partial_fit方法,可以在线申请。我不确定这是否是正确的做法,因为转型会随着时间而改变。如果您不希望数据分布发生太大变化,您还可以在数据子集上安装任何缩放器并在以后使用它。

另请注意,RandomForestClassifier(与所有基于树的分类器一样)是尺度不变的,因此尚不清楚标准化对其有何影响。

【讨论】:

    【解决方案3】:

    RandomForestClassifier 没有实现partial_fit() 方法,它支持对数据块进行增量学习。

    但是,您可以使用estimators_ 和n_estimators 结合RandomForestClassifier 的训练,如提到的here。

    【讨论】:

      猜你喜欢
      • 2019-08-03
      • 2013-03-29
      • 2013-01-18
      • 2012-11-18
      • 2019-02-15
      • 2015-05-20
      • 1970-01-01
      • 2013-06-29
      • 2015-06-10
      相关资源
      最近更新 更多