[jvm-packages]xgboost4j support `early stop` on Validation set


Hi all
I am using XGBoostClassifier, setting two parameters num_early_stopping_rounds and maximize_evaluation_metrics. Compared to python package, I found there is no way to set validation set like watchlist. Is this feature supported or still in the plan.
Please let me know, thank you very much


Currently work in progress: https://github.com/dmlc/xgboost/pull/3910


Got it ,thank you for your reply


I have tried to use early stop@v0.81, but i think there’s some mistakes here:

boolean onTrack = false;
float[] criterion = metrics[metrics.length - 1];
for (int shift = 0; shift < Math.min(iter, earlyStoppingRounds) - 1; shift++) {
  onTrack |= maximizeEvaluationMetrics ?
          criterion[iter - shift] >= criterion[iter - shift - 1] :
          criterion[iter - shift] <= criterion[iter - shift - 1];
return onTrack;


Usualy, iter starts from 0, so it will never enter the for loop, and onTrack will allways equal false, and the training will stop after 1 rounds. Obviously, this is not what we want.


@houyadong Can you file a pull request to fix it?


Thank you for your reply, but i find it has been fixed in the master branch: