[Blocking][jvm-packages] fix the early stopping feature (#3808)
* add back train method but mark as deprecated * add back train method but mark as deprecated * add back train method but mark as deprecated * add back train method but mark as deprecated * fix scalastyle error * fix scalastyle error * fix scalastyle error * fix scalastyle error * temp * add method for classifier and regressor * update tutorial * address the comments * update
This commit is contained in:
@@ -132,6 +132,11 @@ object XGBoost extends Serializable {
|
||||
try {
|
||||
val numEarlyStoppingRounds = params.get("num_early_stopping_rounds")
|
||||
.map(_.toString.toInt).getOrElse(0)
|
||||
if (numEarlyStoppingRounds > 0) {
|
||||
if (!params.contains("maximize_evaluation_metrics")) {
|
||||
throw new IllegalArgumentException("maximize_evaluation_metrics has to be specified")
|
||||
}
|
||||
}
|
||||
val metrics = Array.tabulate(watches.size)(_ => Array.ofDim[Float](round))
|
||||
val booster = SXGBoost.train(watches.train, params, round,
|
||||
watches.toMap, metrics, obj, eval,
|
||||
|
||||
@@ -140,6 +140,9 @@ class XGBoostClassifier (
|
||||
|
||||
def setNumEarlyStoppingRounds(value: Int): this.type = set(numEarlyStoppingRounds, value)
|
||||
|
||||
def setMaximizeEvaluationMetrics(value: Boolean): this.type =
|
||||
set(maximizeEvaluationMetrics, value)
|
||||
|
||||
def setCustomObj(value: ObjectiveTrait): this.type = set(customObj, value)
|
||||
|
||||
def setCustomEval(value: EvalTrait): this.type = set(customEval, value)
|
||||
|
||||
@@ -140,6 +140,9 @@ class XGBoostRegressor (
|
||||
|
||||
def setNumEarlyStoppingRounds(value: Int): this.type = set(numEarlyStoppingRounds, value)
|
||||
|
||||
def setMaximizeEvaluationMetrics(value: Boolean): this.type =
|
||||
set(maximizeEvaluationMetrics, value)
|
||||
|
||||
def setCustomObj(value: ObjectiveTrait): this.type = set(customObj, value)
|
||||
|
||||
def setCustomEval(value: EvalTrait): this.type = set(customEval, value)
|
||||
|
||||
@@ -87,6 +87,13 @@ private[spark] trait LearningTaskParams extends Params {
|
||||
|
||||
final def getNumEarlyStoppingRounds: Int = $(numEarlyStoppingRounds)
|
||||
|
||||
|
||||
final val maximizeEvaluationMetrics = new BooleanParam(this, "maximizeEvaluationMetrics",
|
||||
"define the expected optimization to the evaluation metrics, true to maximize otherwise" +
|
||||
" minimize it")
|
||||
|
||||
final def getMaximizeEvaluationMetrics: Boolean = $(maximizeEvaluationMetrics)
|
||||
|
||||
setDefault(objective -> "reg:linear", baseScore -> 0.5,
|
||||
trainTestRatio -> 1.0, numEarlyStoppingRounds -> 0)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user