Проведено обучение и валидация в gridsearchcv sklearn

Я вижу, что в gridsearchcv лучшие параметры определяются на основе cross-validation, но то, что я действительно хочу сделать, это определить лучшие параметры на основе one held out validation set вместо cross validation,

Не уверен, есть ли способ сделать это. Я нашел несколько похожих постов, где настраивал cross-validation folds, Однако, опять же, мне действительно нужно тренироваться на одном наборе и проверять параметры на наборе проверки.

Еще одна информация о моем наборе данных в основном text series type создано panda,

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)

Использовать 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())
opt.fit(X_train, y_train, param_grid, X_val, y_val)
print('Test Score for Optimized Parameters:', opt.score(X_test, y_test))
Другие вопросы по тегам