sklearn:拟合 RandomForestClassifier 或用数据块规范化数据

Posted

技术标签:

【中文标题】sklearn:拟合 RandomForestClassifier 或用数据块规范化数据【英文标题】:sklearn: fitting RandomForestClassifier or normilize data with chunks of data 【发布时间】: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的热启动拟合不适合新树”。并且可以适应不同的森林,然后附加他们的估计器***.com/questions/28489667/…,但我不确定这是否能正常工作。有人试过吗? 【参考方案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。

【讨论】:

以上是关于sklearn:拟合 RandomForestClassifier 或用数据块规范化数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将不同的输入拟合到 sklearn 管道中?

SkLearn 的决策树:过度拟合还是错误?

防止过拟合的方法 预测鸾凤花(sklearn)

Sklearn拟合线性回归[关闭]

Sklearn拟合线性回归[关闭]

使用 sklearn 同时使用数字和分类变量来拟合决策树