Xgboost: 以评估指标作为 AUC 的早期停止

创建于 2016-05-25  ·  3评论  ·  资料来源: dmlc/xgboost

我正在使用 Xgboost 的 python 版本并尝试在 AUC 上设置提前停止,如下所示:

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)

然而,即使 AUC 仍在增加,5 轮后迭代停止:

将训练直到 eval 错误在 5 轮内没有减少。
[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
停止。 最佳迭代:
[0] train-auc:0.681576 eval- auc:0.672914

在我看来,Xgboost 认为 AUC 应该保持减少而不是增加,否则会触发提前停止。 为什么会出现这种情况以及如何解决?

最有用的评论

也许你可以尝试设置maximize=True,在xgboost.train和xgboost.cv方法中都有

所有3条评论

一种解决方案是定义您自己的评估指标,如此处所述https://github.com/tqchen/xgboost/blob/master/demo/guide-python/custom_objective.py。
而不是以这种方式计算 auc 计算(-auc),它会减少。

谢谢@myouness ! 这确实是一个解决方案。 这种行为是包的错误吗?

也许你可以尝试设置maximize=True,在xgboost.train和xgboost.cv方法中都有

此页面是否有帮助?
0 / 5 - 0 等级