Búsqueda de cuadrícula y detención temprana mediante la validación cruzada con XGBoost en SciKit-Learn

Soy bastante nuevo en el aprendizaje de sci-kit y he estado tratando de sintonizar hiperparámetro XGBoost. Mi objetivo es usar la detención temprana y la búsqueda de cuadrícula para ajustar los parámetros del modelo y usar la detención temprana para controlar el número de árboles y evitar el sobreajuste.

Como estoy usando la validación cruzada para la búsqueda de cuadrícula, esperaba también usar la validación cruzada en los criterios de detención temprana. El código que tengo hasta ahora se ve así:

import numpy as np
import pandas as pd
from sklearn import model_selection
import xgboost as xgb

#Import training and test data
train = pd.read_csv("train.csv").fillna(value=-999.0)
test = pd.read_csv("test.csv").fillna(value=-999.0)

# Encode variables
y_train = train.price_doc
x_train = train.drop(["id", "timestamp", "price_doc"], axis=1)

# XGBoost - sklearn method
gbm = xgb.XGBRegressor()

xgb_params = {
'learning_rate': [0.01, 0.1],
'n_estimators': [2000],
'max_depth': [3, 5, 7, 9],
'gamma': [0, 1],
'subsample': [0.7, 1],
'colsample_bytree': [0.7, 1]
}

fit_params = {
'early_stopping_rounds': 30,
'eval_metric': 'mae',
'eval_set': [[x_train,y_train]]
}

grid = model_selection.GridSearchCV(gbm, xgb_params, cv=5, 
fit_params=fit_params)
grid.fit(x_train,y_train)

El problema que tengo es el parámetro 'eval_set' ter. Entiendo que esto quiere las variables de predicción y respuesta, pero no estoy seguro de cómo puedo usar los datos de validación cruzada como criterios de detención temprana.

¿Alguien sabe cómo superar este problema? Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta