在Scikit-learn中,RandomSearchCV
和GridSearchCV
需要为cv
参数提供交叉验证对象,例如GroupKFold
或sklearn.model_selection
中的任何其他CV分割器。
然而,如何使用单一的、静态验证集呢?我有一个非常大的训练集和一个大的验证集,我只需要CV对象的接口,而不需要整个交叉验证过程。
具体来说,我在使用Scikit-optimize和BayesSearchCV
(文档),它需要CV对象(与常规Scikit-learn的SearchCV
对象具有相同的接口)。我想使用我选择的验证集,而不是整个CV过程。
回答:
scikit-learn
的模型选择对象的文档,例如GridSearchCV
,可能更清楚地说明如何实现这一点:
cv: int, 交叉验证生成器或可迭代对象,默认=None
- …
- 一个可迭代对象,生成(训练,测试)分割作为索引数组。
因此,你需要训练和测试样本的索引数组作为一个元组,然后将它们包装在一个可迭代对象中,例如列表:
train_indices = [...] # 训练的索引test_indices = [...] # 测试的索引cv = [(train_indices, test_indices)]
将这个定义为单一元组的cv
传递给模型选择对象,它将始终使用相同的样本进行训练和测试。