From 71197d1dfa27c80add9954b10284848c1f165c40 Mon Sep 17 00:00:00 2001 From: Shaochen Shi Date: Sun, 2 Aug 2020 08:16:42 +0800 Subject: [PATCH] [jvm-packages] Fix wrong method name `setAllowZeroForMissingValue`. (#5740) * Allow non-zero for missing value when training. * Fix wrong method names. * Add a unit test * Move the getter/setter unit test to MissingValueHandlingSuite Co-authored-by: Hyunsu Cho --- .../scala/spark/XGBoostClassifier.scala | 7 +++- .../scala/spark/XGBoostRegressor.scala | 7 +++- .../spark/MissingValueHandlingSuite.scala | 34 +++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark/XGBoostClassifier.scala b/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark/XGBoostClassifier.scala index b6b09ee64..ecfecdb2a 100644 --- a/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark/XGBoostClassifier.scala +++ b/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark/XGBoostClassifier.scala @@ -141,6 +141,11 @@ class XGBoostClassifier ( def setCustomEval(value: EvalTrait): this.type = set(customEval, value) + def setAllowNonZeroForMissing(value: Boolean): this.type = set( + allowNonZeroForMissing, + value + ) + def setSinglePrecisionHistogram(value: Boolean): this.type = set(singlePrecisionHistogram, value) @@ -248,7 +253,7 @@ class XGBoostClassificationModel private[ml]( def setMissing(value: Float): this.type = set(missing, value) - def setAllowZeroForMissingValue(value: Boolean): this.type = set( + def setAllowNonZeroForMissing(value: Boolean): this.type = set( allowNonZeroForMissing, value ) diff --git a/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark/XGBoostRegressor.scala b/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark/XGBoostRegressor.scala index d8c278d46..2150afaa6 100644 --- a/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark/XGBoostRegressor.scala +++ b/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark/XGBoostRegressor.scala @@ -145,6 +145,11 @@ class XGBoostRegressor ( def setCustomEval(value: EvalTrait): this.type = set(customEval, value) + def setAllowNonZeroForMissing(value: Boolean): this.type = set( + allowNonZeroForMissing, + value + ) + def setSinglePrecisionHistogram(value: Boolean): this.type = set(singlePrecisionHistogram, value) @@ -244,7 +249,7 @@ class XGBoostRegressionModel private[ml] ( def setMissing(value: Float): this.type = set(missing, value) - def setAllowZeroForMissingValue(value: Boolean): this.type = set( + def setAllowNonZeroForMissing(value: Boolean): this.type = set( allowNonZeroForMissing, value ) diff --git a/jvm-packages/xgboost4j-spark/src/test/scala/ml/dmlc/xgboost4j/scala/spark/MissingValueHandlingSuite.scala b/jvm-packages/xgboost4j-spark/src/test/scala/ml/dmlc/xgboost4j/scala/spark/MissingValueHandlingSuite.scala index f5466df10..75106bec4 100644 --- a/jvm-packages/xgboost4j-spark/src/test/scala/ml/dmlc/xgboost4j/scala/spark/MissingValueHandlingSuite.scala +++ b/jvm-packages/xgboost4j-spark/src/test/scala/ml/dmlc/xgboost4j/scala/spark/MissingValueHandlingSuite.scala @@ -198,4 +198,38 @@ class MissingValueHandlingSuite extends FunSuite with PerTest { val model = new XGBoostClassifier(paramMap).fit(inputDF) model.transform(inputDF).collect() } + + test("Getter and setter for AllowNonZeroForMissingValue works") { + { + val paramMap = Map("eta" -> "1", "max_depth" -> "6", + "objective" -> "binary:logistic", "num_round" -> 5, "num_workers" -> numWorkers) + val training = buildDataFrame(Classification.train) + val classifier = new XGBoostClassifier(paramMap) + classifier.setAllowNonZeroForMissing(true) + assert(classifier.getAllowNonZeroForMissingValue) + classifier.setAllowNonZeroForMissing(false) + assert(!classifier.getAllowNonZeroForMissingValue) + val model = classifier.fit(training) + model.setAllowNonZeroForMissing(true) + assert(model.getAllowNonZeroForMissingValue) + model.setAllowNonZeroForMissing(false) + assert(!model.getAllowNonZeroForMissingValue) + } + + { + val paramMap = Map("eta" -> "1", "max_depth" -> "6", "silent" -> "1", + "objective" -> "reg:squarederror", "num_round" -> 5, "num_workers" -> numWorkers) + val training = buildDataFrame(Regression.train) + val regressor = new XGBoostRegressor(paramMap) + regressor.setAllowNonZeroForMissing(true) + assert(regressor.getAllowNonZeroForMissingValue) + regressor.setAllowNonZeroForMissing(false) + assert(!regressor.getAllowNonZeroForMissingValue) + val model = regressor.fit(training) + model.setAllowNonZeroForMissing(true) + assert(model.getAllowNonZeroForMissingValue) + model.setAllowNonZeroForMissing(false) + assert(!model.getAllowNonZeroForMissingValue) + } + } }