Ich möchte die early_stopping_rounds
von XGBoost verwenden, um nicht überziehen Training. Dazu verwende ich folgenden Code:XGBoost Reporting Eval-Auc ist zurückgegangen, aber Train-Auc ist gestiegen, ob das Ergebnis normal ist?
parameters = {'nthread': 4,'objective': 'binary:logistic','learning_rate': 0.06,'max_depth': 6,'min_child_weight': 3,
'silent': 0,'gamma': 0,'subsample': 0.7,'colsample_bytree': 0.5,'n_estimators': 5,
'missing': -999,'scale_pos_weight': scale_pos_weight,'seed': 4789,'eval_metric':'auc','early_stopping_rounds': 100}
X_train, X_test, y_train, y_test =train_test_split(train_feature,train_label, test_size=0.3, random_state=4789)
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
evallist = [(dtest, 'eval'), (dtrain, 'train')]
bst = xgb.train(parameters, dtrain,num_boost_round=1500, evals=evallist)
wenn Druckzwischenergebnisse i log erhalten, wie:
[1469] eval-auc:0.912417 train-auc:0.986104
[16:04:23] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 110 extra nodes, 0 pruned nodes, max_depth=6
[1470] eval-auc:0.912412 train-auc:0.986118
[16:04:27] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 102 extra nodes, 0 pruned nodes, max_depth=6
[1471] eval-auc:0.912405 train-auc:0.986129
[16:04:30] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 116 extra nodes, 0 pruned nodes, max_depth=6
[1472] eval-auc:0.912383 train-auc:0.986143
[16:04:34] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 116 extra nodes, 0 pruned nodes, max_depth=6
[1473] eval-auc:0.912375 train-auc:0.986159
jetzt frage ich mich dieser Zug Ergebnis richtig ist, wie zu erkennen, dass, wenn mein Modell Überanpassung oder nicht und wie viele Runden zu wählen?
Ja, es ist korrekt, wenn die AUC Ihres Zuges zunimmt, aber die AUC-Validierung abnimmt - es ist das Zeichen der Überanpassung. Allgemeine Empfehlung über early_stopping_rounds - 10% von Ihrem num_boost_round = 150 für Ihren Fall. Hier ist ein Artikel darüber - http://machinelearningmastery.com/avoid-overfitting-by-early-stopping-with-xgboost-in-python/ –
Danke, wenn Sie "[220]", ich habe meine Validierung AUC beobachtet fangen an zu sinken und trainieren-auc noch zunehmen. Ich bin verwirrt, dass ich 'early_stopping_rounds' in den Parametern dict gesetzt habe, jedoch nicht, warum? Aus diesem Ergebnis sollte ich num_boost_round = 220 setzen? – phoebe