根据sklearn的RandomizedSearchCV和GridSearchCV模块的文档,它们仅支持用于分类器的fit
方法,该方法传递给他们,但不支持{{1 }}分类器的方法,可用于增量训练。当前,我正在尝试使用partial_fit
,它可以使用SGDClassifier
方法在增量数据上进行训练,并为此找到最佳的超参数集。我只是想知道为什么partial_fit
或RandomizedSearchCV
不支持GridSearchCV
。我看不到任何无法解决此问题的技术原因(如果我在这里错了,请纠正我)。任何潜在客户将不胜感激。
答案 0 :(得分:0)
是的,从技术上讲,您也可以为partial_fit
编写GridSerachCV,但是当您考虑
它与我们使用.fit()
方法所做的完全不同。这是我在partial_fit
/ GridsearchCV
中没有RandomSearchCV
的原因。
您要搜索什么?
当我们针对一批数据优化模型的超级参数时,对于最终模型(使用多个partial_fit
在完整数据上进行训练)而言,它可能不是最优的。现在,问题就变成了找到超参数的最佳时间表,即在每个批次/时间步的超参数的最佳值是多少。这方面的一个例子是神经网络中递减的学习率,其中我们使用多个partial_fit
训练模型,并且超参数-学习率值不是单个值,而是需要用于的一系列值每个步骤/批次。
此外,您需要多次遍历整个数据集(多个历元),以了解超级参数的最佳调度。这需要对GridSearchCV进行基本的API更改。
您正在优化什么?
partial_fit
的结尾处获得最佳性能,或者可以迅速(以较少的批次)达到常规指标(precision
,recall
,{{1} }等),一和二的某种组合。因此,这还需要对API进行更改,以计算用于汇总模型性能的单个值,该更改是使用多个f1-score
进行训练的。答案 1 :(得分:0)
我认为这可以用不同的方式解决。我遇到了只有 partial_fit
有效的问题(数据太大,无法通过 fit
进行完整的批量学习),所以我认为 scikit-learn 应该在某处提供 partial_fit
支持。
代替在 partial_fit
中包含 GridSearchCV
,您可以编写一个简单的包装器(类似于 pytorch DataLoader
),将 partial_fit
模型转换为 fit
模型,并在包装器的 fit
内进行批量拆分和洗牌。然后,您可以使 GridSearchCV
工作,并使用包装器提供的额外参数进行微调(batch_size
和 is_shuffle
)