私はPythonバージョンのXgboostを使用しており、次のように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ラウンド後に反復は停止します。
評価エラーが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が増加するのではなく減少し続けるべきだと考えています。そうしないと、早期停止がトリガーされます。 なぜこれが当てはまるのか、そしてそれを修正する方法は?
1つの解決策は、 https://github.com/tqchen/xgboost/blob/master/demo/guide-python/custom_objective.pyで説明されているように、独自の評価メトリックを定義することです。
そして、この方法でauc計算(-auc)を計算する代わりに、それは減少します。
ありがとう@myouness ! それは確かに解決策です。 この動作はパッケージのバグですか?
たぶんあなたはmaximize=Trueを設定しようとすることができます、それはxgboost.trainとxgboost.cvメソッドで利用可能です
最も参考になるコメント
たぶんあなたはmaximize=Trueを設定しようとすることができます、それはxgboost.trainとxgboost.cvメソッドで利用可能です