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)
Ich habe nicht genug Ruf, um die Antwort von @ darXider zu kommentieren. Also füge ich eine "Antwort" hinzu, um Kommentare abzugeben.
Warum benötigen Sie,
for train_index, test_index in folds:
daclf
bereits eine Kreuzvalidierung durchgeführt wird, um den besten Satz von Hyperparameterwerten auszuwählen?In Ihrem Code sieht es so aus, als würden Sie für jede der fünf Falten einen Lebenslauf erstellen (einen "verschachtelten" Lebenslauf), um das beste Modell für diese bestimmte Falte auszuwählen. Am Ende haben Sie also fünf "beste" Schätzer. Höchstwahrscheinlich haben sie nicht dieselben Hyperparameterwerte.
Korrigieren Sie mich, wenn ich falsch liege.
quelle