Quiero optimizar los hiperparámetros de XGboost usando la validación cruzada. Sin embargo, no está claro cómo obtener el modelo de xgb.cv
.
Por ejemplo, llamo objective(params)
desde fmin
. A continuación, el modelo se ajusta dtrain
%-% y se valida dvalid
. ¿Qué pasa si quiero usar la validación cruzada de KFold en lugar de la dtrain
%-%
from hyperopt import fmin, tpe
import xgboost as xgb
params = {
'n_estimators' : hp.quniform('n_estimators', 100, 1000, 1),
'eta' : hp.quniform('eta', 0.025, 0.5, 0.025),
'max_depth' : hp.quniform('max_depth', 1, 13, 1)
#...
}
best = fmin(objective, space=params, algo=tpe.suggest)
def objective(params):
dtrain = xgb.DMatrix(X_train, label=y_train)
dvalid = xgb.DMatrix(X_valid, label=y_valid)
watchlist = [(dtrain, 'train'), (dvalid, 'eval')]
model = xgb.train(params, dtrain, num_boost_round,
evals=watchlist, feval=myFunc)
# xgb.cv(param, dtrain, num_boost_round, nfold = 5, seed = 0,
# feval=myFunc)