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
方法对增量数据进行训练,并且还可以找到最佳的超参数集。我只是想知道为什么RandomizedSearchCV
或GridSearchCV
不支持partial_fit
。我看不出有任何技术原因说明为什么不能这样做(如果我在这里错了,请纠正我)。任何线索将不胜感激。
【问题讨论】:
它只是没有实现,因为大多数 sklearn 模型不支持partial_fit
【参考方案1】:
我认为这可以通过不同的方式解决。我遇到了只有partial_fit
有效的问题(数据太大,无法通过fit
进行全批量学习),所以我认为scikit-learn 应该在某个地方支持partial_fit
。
您可以编写一个简单的包装器(类似于 pytorch DataLoader
)而不是在 GridSearchCV
中使用 partial_fit
,它将 partial_fit
模型转换为 fit
模型,并在包装器的fit
。然后您可以使GridSearchCV
工作,并使用包装器提供的额外参数进行微调(batch_size
和is_shuffle
)
【讨论】:
【参考方案2】:是的,从技术上讲,您也可以为 partial_fit
编写一个 GridSerachCV,但是当您考虑时
它与我们使用.fit()
方法所做的完全不同。这是我在GridsearchCV
/RandomSearchCV
中没有partial_fit
的原因列表。
你在搜索什么?
当我们针对一批数据优化模型的超参数时,最终模型(使用多个 partial_fit
s 对完整数据进行训练)可能不是最优的。现在问题变成了寻找超参数的最佳调度,即每个批次/时间步的超参数的最佳值是多少。这方面的一个例子是神经网络中的衰减学习率,我们使用多个partial_fit
s 和超参数训练模型 - 学习率值不是单个值,而是每次都需要使用的一系列值步骤/批处理。
此外,您还需要多次(多个时期)循环整个数据集,以了解超参数的最佳调度。这需要对 GridSearchCV 进行基本的 API 更改。
您的优化目标是什么?
-
现在需要更改模型的评估指标。该指标可以在所有
partial_fit
s 结束时实现最佳性能,或者对于通常的指标(precision
、recall
、f1-score
等)快速达到最佳性能(以更少的批次),一些组合一和二。因此,这也需要更改 API 以计算用于总结模型性能的单个值,该模型使用多个 partial_fit
s 进行训练。
【讨论】:
如何选择其他超参数(例如正则化系数)?您是否需要对所有超参数值进行外部循环,并在内部循环多次调用partial_fit
?以上是关于GridSearchCV/RandomizedSearchCV 与 sklearn 中的 partial_fit的主要内容,如果未能解决你的问题,请参考以下文章