[英]GridSearchCV/RandomizedSearchCV with partial_fit in sklearn
根据 sklearn 的RandomizedSearchCV和GridSearchCV模块的文档,它们仅支持传递给它们的分类器的fit
方法,不支持可用于增量训练的分类器的partial_fit
方法。 目前,我正在尝试使用SGDClassifier
,它可以使用partial_fit
方法对增量数据进行训练,并且还可以找到相同的最佳超参数集。 我只是想知道为什么RandomizedSearchCV
或GridSearchCV
支持partial_fit
。 我没有看到任何关于为什么不能这样做的技术原因(如果我在这里错了,请纠正我)。 任何线索将不胜感激。
是的,从技术上讲,您也可以为partial_fit
编写一个GridSerachCV,但是当您考虑
它与我们使用.fit()
方法所做的完全不同。 这是我在GridsearchCV
/ RandomSearchCV
没有partial_fit
的原因。
您正在寻找什么?
当我们针对一批数据优化模型的超级参数时,对于最终模型(使用多个partial_fit
对完整数据进行训练)而言,它可能不是最佳的。 现在,问题就变成了找到超参数的最佳计划,即在每个批次/时间步中超参数的最佳值是多少。 其中一个示例是神经网络中递减的学习率,其中我们使用多个partial_fit
和超参数来训练模型-学习率值不是单个值,而是每个时间步长/需要使用的一系列值批量。
此外,您还需要遍历整个数据集多次(多个时期),以了解超参数的最佳调度。 这需要对GridSearchCV进行基本的API更改。
您正在优化什么?
partial_fit
的结尾处获得最佳性能,或者可以以常规指标( precision
, recall
, f1-score
等)(一种或两种的组合)快速(以较少的批次)达到最佳点。 因此,这还需要API更改以计算单个值以汇总模型的性能,该更改使用多个partial_fit
进行训练。 我认为这可以以不同的方式解决。 我遇到了只有partial_fit
起作用的问题(数据太大而无法通过fit
进行完整的批量学习),所以我认为 scikit-learn 应该在某处提供partial_fit
支持。
您可以编写一个简单的包装器(类似于 pytorch DataLoader
),将partial_fit
模型转换为fit
模型,并在包装器的fit
进行批量拆分和洗牌,而不是在GridSearchCV
中使用partial_fit
。 然后您可以使GridSearchCV
工作,并使用包装器提供的额外参数进行微调( batch_size
和is_shuffle
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.