sklearn中带有partial_fit的GridSearchCV / RandomizedSearchCV

时间:2019-07-19 09:26:07

标签: python machine-learning scikit-learn grid-search hyperparameters

根据sklearn的RandomizedSearchCVGridSearchCV模块的文档,它们仅支持用于分类器的fit方法,该方法传递给他们,但不支持{{1 }}分类器的方法,可用于增量训练。当前,我正在尝试使用partial_fit,它可以使用SGDClassifier方法在增量数据上进行训练,并为此找到最佳的超参数集。我只是想知道为什么partial_fitRandomizedSearchCV不支持GridSearchCV。我看不到任何无法解决此问题的技术原因(如果我在这里错了,请纠正我)。任何潜在客户将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

  • 您要搜索什么?
  • 您正在优化什么?

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

  

您要搜索什么?

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

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

  

您正在优化什么?

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

答案 1 :(得分:0)

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

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