Ich möchte die Hyperparameter von XGboost mithilfe der Kreuzvalidierung optimieren. Es ist jedoch nicht klar, wie man das Modell erhält xgb.cv
. Zum Beispiel rufe ich objective(params)
von an fmin
. Dann wird das Modell montiert dtrain
und validiert dvalid
. Was ist, wenn ich KFold Crossvalidation verwenden möchte, anstatt zu trainieren 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)