From 397d8f0ee733d4b918eaa6c2da28b381566547c3 Mon Sep 17 00:00:00 2001 From: Liang-Chi Hsieh Date: Sun, 19 Apr 2020 23:10:30 -0700 Subject: [PATCH] [jvm-packages] XGBoost Spark should deal with NaN when parsing evaluation output (#5546) --- .../src/main/java/ml/dmlc/xgboost4j/java/Booster.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/jvm-packages/xgboost4j/src/main/java/ml/dmlc/xgboost4j/java/Booster.java b/jvm-packages/xgboost4j/src/main/java/ml/dmlc/xgboost4j/java/Booster.java index f97aa3a39..d8ba6ea8e 100644 --- a/jvm-packages/xgboost4j/src/main/java/ml/dmlc/xgboost4j/java/Booster.java +++ b/jvm-packages/xgboost4j/src/main/java/ml/dmlc/xgboost4j/java/Booster.java @@ -242,7 +242,14 @@ public class Booster implements Serializable, KryoSerializable { String stringFormat = evalSet(evalMatrixs, evalNames, iter); String[] metricPairs = stringFormat.split("\t"); for (int i = 1; i < metricPairs.length; i++) { - metricsOut[i - 1] = Float.valueOf(metricPairs[i].split(":")[1]); + String value = metricPairs[i].split(":")[1]; + if (value.equalsIgnoreCase("nan")) { + metricsOut[i - 1] = Float.NaN; + } else if (value.equalsIgnoreCase("-nan")) { + metricsOut[i - 1] = -Float.NaN; + } else { + metricsOut[i - 1] = Float.valueOf(value); + } } return stringFormat; }