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)]的主要内容,如果未能解决你的问题,请参考以下文章