在 gridsearchcv sklearn 中进行训练和验证集

Posted

技术标签:

【中文标题】在 gridsearchcv sklearn 中进行训练和验证集【英文标题】:Held out training and validation set in gridsearchcv sklearn 【发布时间】:2016-10-14 16:21:09 【问题描述】:

我看到在gridsearchcv中最佳参数是根据cross-validation确定的,但我真正想做的是根据one held out validation set而不是cross validation确定最佳参数。

不确定是否有办法做到这一点。我发现了一些自定义cross-validation folds 的类似帖子。但是,我真正需要的是在一组上进行训练并在验证集上验证参数。

关于我的数据集的更多信息基本上是由panda 创建的text series type

【问题讨论】:

您是否尝试过查看 gridsearchcv 类的 cv 参数。它可以将您想要的拆分作为可迭代的。您可以将您的验证集附加到训练集并传递一个在训练和验证时给出拆分的迭代? 这能回答你的问题吗? Using explicit (predefined) validation set for grid search with sklearn 【参考方案1】:

使用hypopt Python 包 (pip install hypopt)。这是一个专业的软件包,专门用于使用验证集进行参数优化。它适用于任何开箱即用的 scikit-learn 模型,也可以与 Tensorflow、PyTorch、Caffe2 等一起使用。

# Code from https://github.com/cgnorthcutt/hypopt
# Assuming you already have train, test, val sets and a model.
from hypopt import GridSearch
param_grid = [
  'C': [1, 10, 100], 'kernel': ['linear'],
  'C': [1, 10, 100], 'gamma': [0.001, 0.0001], 'kernel': ['rbf'],
 ]
# Grid-search all parameter combinations using a validation set.
opt = GridSearch(model = SVR(), param_grid = param_grid)
opt.fit(X_train, y_train, X_val, y_val)
print('Test Score for Optimized Parameters:', opt.score(X_test, y_test))

【讨论】:

然后您是否使用 gridsearch 中的超参数来训练您的最终模型,例如:opt.best_estimator_.fit(train,y) 并将其用作最终结果 @Maths12 它已经被训练过了。您可以直接使用最佳估计器进行预测。 使用sklearns gridsearch和hyopt有什么区别?我认为 sklearn gridsearch cv 确实提供了一个验证集? @maths12 sklearn 使用交叉验证,这很慢并且使用较少的数据进行训练,因为它从数据集中取出验证集。它为每一折进行训练(5 倍 CV 的训练时间为 4 倍)。 Hypopt 使用您已经拥有的预定义验证集。如果您没有预定义的验证集,Hypopt 也可以进行交叉验证,这与 sklearn 没有什么不同。但通常您将 hypopt 与预定义的验证集一起使用。【参考方案2】:

我确实通过使用 PredefinedSplit 为我自己的问题找到了答案

for i in range(len(doc_train)-1):
    train_ind[i] = -1

for i in range(len(doc_val)-1):
    val_ind[i] = 0

ps = PredefinedSplit(test_fold=np.concatenate((train_ind,val_ind)))

然后在 gridsearchCV 参数中

grid_search = GridSearchCV(pipeline, parameters, n_jobs=7, verbose=1 ,   cv=ps)

【讨论】:

以上是关于在 gridsearchcv sklearn 中进行训练和验证集的主要内容,如果未能解决你的问题,请参考以下文章

sklearn.SVC 在使用带有小型平衡数据集的 GridSearchCV 时返回完全不同的预测(模型)

GridSearchCV(sklearn)中的多个估计器

解读 sklearns 的 GridSearchCV 最佳成绩

拟合 sklearn GridSearchCV 模型

SKLEARN // 将 GridsearchCV 与列变换和管道相结合

如何在 python 中的 sklearn 中获取 GridSearchCV 中的选定功能