Xgboost: Parada antecipada com métrica de avaliação como AUC

Criado em 25 mai. 2016  ·  3Comentários  ·  Fonte: dmlc/xgboost

Estou usando a versão python do Xgboost e tentando definir a parada antecipada no AUC da seguinte maneira:

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)

No entanto, mesmo que a AUC ainda esteja aumentando, após 5 rodadas a iteração para:

Vai treinar até que o erro de avaliação não diminua em 5 rodadas.
[0] train-auc:0.681576 eval -auc:0.672914
[1] train-auc:0.713940 eval -auc:0.705898
[2] train-auc:0.719168 eval -auc:0.710064
[3] train-auc:0.724578 eval -auc:0.713953
[4] train-auc:0.729903 eval -auc:0.718029
[5] train-auc:0.732958 eval -auc:0.719815
Parando. Melhor iteração:
[0] train-auc:0.681576 eval -auc:0.672914

Isso me parece de alguma forma que o Xgboost acha que a AUC deve continuar diminuindo em vez de aumentar, caso contrário, a parada inicial será acionada. Por que esse é o caso e como corrigi-lo?

Comentários muito úteis

Talvez você possa tentar definir maximize=True, está disponível no método xgboost.train e xgboost.cv

Todos 3 comentários

Uma solução é definir sua própria métrica de avaliação, conforme explicado aqui https://github.com/tqchen/xgboost/blob/master/demo/guide-python/custom_objective.py.
E ao invés de calcular o auc computa (-auc) dessa forma ele vai diminuir.

Obrigado @myouness ! Isso sim é uma solução. Esse comportamento é um bug do pacote?

Talvez você possa tentar definir maximize=True, está disponível no método xgboost.train e xgboost.cv

Esta página foi útil?
0 / 5 - 0 avaliações