Xgboost: Frühes Absetzen mit Bewertungsmetrik als AUC

Erstellt am 25. Mai 2016  ·  3Kommentare  ·  Quelle: dmlc/xgboost

Ich verwende die Python-Version von Xgboost und versuche, das vorzeitige Stoppen der AUC wie folgt festzulegen:

param = {
         'bst:max_depth':4,
         'bst:eta':0.1,  
         'silent':1,
         'objective':'binary:logistic'
         }

param['nthread'] = 10
param['eval_metric'] = "auc"
param['seed'] = 0

plst = param.items()

evallist  = [(dtrain_test1,'train'), (dtest2,'eval')]

num_round = 50
bst = xgb.train( plst, dtrain_test1, num_round, evallist, early_stopping_rounds = 5)

Doch obwohl die AUC immer noch zunimmt, stoppt die Iteration nach 5 Runden:

Wird trainieren, bis der Bewertungsfehler in 5 Runden nicht abgenommen hat.
[0] train- auc:0.681576 evalu- auc:0.672914
[1] train- auc:0.713940 evalu- auc:0.705898
[2] train- auc:0.719168 evalu- auc:0.710064
[3] train- auc:0.724578 evalu- auc:0.713953
[4] train- auc:0.729903 evalu- auc:0.718029
[5] train- auc:0.732958 evalu- auc:0.719815
Anhalten. Beste Iteration:
[0] train- auc:0.681576 evalu- auc:0.672914

Das sieht für mich irgendwie so aus, als würde Xgboost denken, dass die AUC weiter abnehmen sollte, anstatt zu steigen, sonst wird der frühe Stopp ausgelöst. Warum ist das so und wie kann man es beheben?

Hilfreichster Kommentar

Vielleicht können Sie versuchen, maximum=True zu setzen, es ist in den Methoden xgboost.train und xgboost.cv verfügbar

Alle 3 Kommentare

Eine Lösung besteht darin, Ihre eigene Bewertungsmetrik zu definieren, wie hier erklärt https://github.com/tqchen/xgboost/blob/master/demo/guide-python/custom_objective.py.
Und anstatt die auc compute (-auc) auf diese Weise zu berechnen, wird sie verringert.

Danke @myouness ! Das ist in der Tat eine Lösung. Ist dieses Verhalten ein Fehler des Pakets?

Vielleicht können Sie versuchen, maximum=True zu setzen, es ist in den Methoden xgboost.train und xgboost.cv verfügbar

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen