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 或用数据块规范化数据的主要内容,如果未能解决你的问题,请参考以下文章