GridSearchCV/RandomizedSearchCV 与 sklearn 中的 partial_fit

Posted

技术标签:

【中文标题】GridSearchCV/RandomizedSearchCV 与 sklearn 中的 partial_fit【英文标题】:GridSearchCV/RandomizedSearchCV with partial_fit in sklearn 【发布时间】:2019-11-28 06:32:00 【问题描述】:

根据sklearn的RandomizedSearchCV和GridSearchCV模块的文档,它们只支持传递给它们的分类器的fit方法,不支持分类器的partial_fit方法,它可以用于增量训练。目前,我正在尝试使用SGDClassifier,它可以使用partial_fit 方法对增量数据进行训练,并且还可以找到最佳的超参数集。我只是想知道为什么RandomizedSearchCVGridSearchCV 不支持partial_fit。我看不出有任何技术原因说明为什么不能这样做(如果我在这里错了,请纠正我)。任何线索将不胜感激。

【问题讨论】:

它只是没有实现,因为大多数 sklearn 模型不支持partial_fit 【参考方案1】:

我认为这可以通过不同的方式解决。我遇到了只有partial_fit 有效的问题(数据太大,无法通过fit 进行全批量学习),所以我认为scikit-learn 应该在某个地方支持partial_fit

您可以编写一个简单的包装器(类似于 pytorch DataLoader)而不是在 GridSearchCV 中使用 partial_fit,它将 partial_fit 模型转换为 fit 模型,并在包装器的fit。然后您可以使GridSearchCV 工作,并使用包装器提供的额外参数进行微调(batch_sizeis_shuffle

【讨论】:

【参考方案2】:

是的,从技术上讲,您也可以为 partial_fit 编写一个 GridSerachCV,但是当您考虑时

您在搜索什么? 您优化的目的是什么?

它与我们使用.fit() 方法所做的完全不同。这是我在GridsearchCV/RandomSearchCV 中没有partial_fit 的原因列表。

你在搜索什么?

    当我们针对一批数据优化模型的超参数时,最终模型(使用多个 partial_fits 对完整数据进行训练)可能不是最优的。现在问题变成了寻找超参数的最佳调度,即每个批次/时间步的超参数的最佳值是多少。这方面的一个例子是神经网络中的衰减学习率,我们使用多个partial_fits 和超参数训练模型 - 学习率值不是单个值,而是每次都需要使用的一系列值步骤/批处理。

    此外,您还需要多次(多个时期)循环整个数据集,以了解超参数的最佳调度。这需要对 GridSearchCV 进行基本的 API 更改。

您的优化目标是什么?

    现在需要更改模型的评估指标。该指标可以在所有partial_fits 结束时实现最佳性能,或者对于通常的指标(precisionrecallf1-score 等)快速达到最佳性能(以更少的批次),一些组合一和二。因此,这也需要更改 API 以计算用于总结模型性能的单个值,该模型使用多个 partial_fits 进行训练。

【讨论】:

如何选择其他超参数(例如正则化系数)?您是否需要对所有超参数值进行外部循环,并在内部循环多次调用partial_fit

以上是关于GridSearchCV/RandomizedSearchCV 与 sklearn 中的 partial_fit的主要内容,如果未能解决你的问题,请参考以下文章