xgboost4j - spark 评估需要 RDD[(Double, Double)]

Posted

技术标签:

【中文标题】xgboost4j - spark 评估需要 RDD[(Double, Double)]【英文标题】:xgboost4j - spark evaluate requires RDD[(Double, Double)] 【发布时间】:2016-11-10 08:08:12 【问题描述】:

我尝试将 xgboost4j 与 spark 2.0.1 和 Dataset API 一起使用。到目前为止,我使用model.transform(testData)获得了以下格式的预测

predictions.printSchema
root
 |-- label: double (nullable = true)
 |-- features: vector (nullable = true)
 |-- probabilities: vector (nullable = true)
 |-- prediction: double (nullable = true)


+-----+--------------------+--------------------+----------+
|label|            features|       probabilities|prediction|
+-----+--------------------+--------------------+----------+
|  0.0|[0.0,1.0,0.0,476....|[0.96766251325607...|       0.0|
|  0.0|[0.0,1.0,0.0,642....|[0.99599152803421...|       0.0|

但现在我想生成评估指标。如何将预测映射到正确的格式? XGBoost-4j by DMLC on Spark-1.6.1 提出了类似的问题,但我无法让它为我工作。

val metrics = new BinaryClassificationMetrics(predictions.select("prediction", "label").rdd)
would require RDD[(Double, Double)] 

而不是看起来像的predictions.select("prediction", "label")

root
 |-- label: double (nullable = true)
 |-- prediction: double (nullable = true)

尝试将其映射到所需的元组,例如:

predictions.select("prediction", "label").mapcase Row(_) => (_,_)

也无法正常工作。

编辑

在 sparks 文档中阅读更多内容,我发现 http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.ml.evaluation.BinaryClassificationEvaluator 支持 ml 而不是 ml-lib,例如数据集。到目前为止,我无法成功地将 xgboost4j 集成到管道中。

【问题讨论】:

【参考方案1】:

这是一个很好的例子https://github.com/dmlc/xgboost/blob/master/jvm-packages/xgboost4j-example/src/main/scala/ml/dmlc/xgboost4j/scala/example/spark/SparkModelTuningTool.scala 如何在火花管道中使用 xgboost4j。事实上,他们有一个 XGBoostEstimator,它在管道中运行良好。

【讨论】:

以上是关于xgboost4j - spark 评估需要 RDD[(Double, Double)]的主要内容,如果未能解决你的问题,请参考以下文章

The 65rd Spark Club Meeting

The 63rd Spark Club Meeting:Destiny

Spark ML机器学习库评估指标示例

spark

spark 评估指标

spark 评估指标