首页 > 解决方案 > Scikit-learn - 如何为 CV 对象使用单个静态验证集?

问题描述

在 Scikit-learn中RandomSearchCVGridSearchCV需要cv参数的交叉验证对象,例如,GroupKFold或任何其他 CV 拆分器sklearn.model_selection

但是,如何使用单个静态验证集?我有非常大的训练集,大验证集,我只需要 CV 对象的接口,而不是整个交叉验证。

具体来说,我使用的是 Scikit-optimize 和BayesSearchCV( docs ),它需要 CV 对象(与常规 Scikit-learn 对象相同的接口SearchCV)。我想使用我选择的验证集,而不是整个简历。

标签: pythonmachine-learningscikit-learnhyperparametersscikit-optimize

解决方案


的模型选择对象的文档scikit-learn,例如GridSearchCV,可能更清楚如何实现这一点:

cv: int,交叉验证生成器或可迭代对象,默认=None

  • ...
  • 一个可迭代的收益 (train, test) 拆分为索引数组

因此,您需要将用于训练和测试样本的索引数组作为一个元组,然后将它们包装在一个可迭代的对象中,例如一个列表:

train_indices = [...]  # indices for training
test_indices = [...]  # indices for testing

cv = [(train_indices, test_indices)]

将使用单个元组定义的这个传递cv给模型选择对象,它将始终使用相同的样本进行训练和测试。


推荐阅读