[jvm-packages] Avoid loosing precision when computing probabilities by converting to Double early (#3576)
This commit is contained in:
parent
ce0f0568a6
commit
2b7a1c5780
@ -411,20 +411,15 @@ class XGBoostClassificationModel private[ml](
|
|||||||
}
|
}
|
||||||
|
|
||||||
val probabilityUDF = udf { probability: mutable.WrappedArray[Float] =>
|
val probabilityUDF = udf { probability: mutable.WrappedArray[Float] =>
|
||||||
if (numClasses == 2) {
|
val prob = probability.map(_.toDouble).toArray
|
||||||
Vectors.dense(Array(1 - probability(0), probability(0)).map(_.toDouble))
|
val probabilities = if (numClasses == 2) Array(1.0 - prob(0), prob(0)) else prob
|
||||||
} else {
|
Vectors.dense(probabilities)
|
||||||
Vectors.dense(probability.map(_.toDouble).toArray)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val predictUDF = udf { probability: mutable.WrappedArray[Float] =>
|
val predictUDF = udf { probability: mutable.WrappedArray[Float] =>
|
||||||
// From XGBoost probability to MLlib prediction
|
// From XGBoost probability to MLlib prediction
|
||||||
val probabilities = if (numClasses == 2) {
|
val prob = probability.map(_.toDouble).toArray
|
||||||
Array(1 - probability(0), probability(0)).map(_.toDouble)
|
val probabilities = if (numClasses == 2) Array(1.0 - prob(0), prob(0)) else prob
|
||||||
} else {
|
|
||||||
probability.map(_.toDouble).toArray
|
|
||||||
}
|
|
||||||
probability2prediction(Vectors.dense(probabilities))
|
probability2prediction(Vectors.dense(probabilities))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user