繁体   English   中英

在sklearn中使用partial_fit的GridSearchCV/RandomizedSearchCV

[英]GridSearchCV/RandomizedSearchCV with partial_fit in sklearn

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

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

  • 您正在寻找什么?
  • 您正在优化什么?

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

您正在寻找什么?

  1. 当我们针对一批数据优化模型的超级参数时,对于最终模型(使用多个partial_fit对完整数据进行训练)而言,它可能不是最佳的。 现在,问题就变成了找到超参数的最佳计划,即在每个批次/时间步中超参数的最佳值是多少。 其中一个示例是神经网络中递减的学习率,其中我们使用多个partial_fit和超参数来训练模型-学习率值不是单个值,而是每个时间步长/需要使用的一系列值批量。

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

您正在优化什么?

  1. 现在需要更改模型的评估指标。 该指标可能会在所有partial_fit的结尾处获得最佳性能,或者可以以常规指标( precisionrecallf1-score等)(一种或两种的组合)快速(以较少的批次)达到最佳点。 因此,这还需要API更改以计算单个值以汇总模型的性能,该更改使用多个partial_fit进行训练。

我认为这可以以不同的方式解决。 我遇到了只有partial_fit起作用的问题(数据太大而无法通过fit进行完整的批量学习),所以我认为 scikit-learn 应该在某处提供partial_fit支持。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM