GridSearchCV/RandomizedSearchCV 与 partial_fit 在 sklearn 中

GridSearchCV/RandomizedSearchCV with partial_fit in sklearn

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

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

  • 您在搜索什么?
  • 您要优化的是什么?

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

中没有 partial_fit 的原因列表

what is that you are searching for?

  1. 当我们为一批数据优化模型的超参数时,最终模型可能是 sub-optimal(使用多个 partial_fits)。现在问题变成了寻找超参数的最佳时间表,即每个 batch/time 步骤的超参数的最佳值是多少。这方面的一个例子是神经网络中的衰减学习率,我们使用多个 partial_fits 和超参数训练模型 - 学习率值不会是单个值,而是需要用于每次 step/batch.

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

what is that your are optimizing for?

  1. 现在需要更改模型的评估指标。对于通常的指标(precisionrecallf1-score, 等等), 一些一和二的组合。因此,这也需要 API 更改来计算单个值以总结模型的性能,该模型是使用多个 partial_fits 训练的。

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

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