2016-11-10 7 views
1

Я пытаюсь использовать xgboost4j с искровым 2.0.1 и API Dataset. До сих пор я получил предсказание в следующем формате с помощью model.transform(testData)xgboost4j - оценка искривления требует RDD [(Double, Double)]

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) 

Tryping, чтобы отобразить его на требуемом кортеже, как:

predictions.select("prediction", "label").map{case Row(_) => (_,_)} 

не работает, как хорошо.

редактировать

чтение немного больше в документации искры я нашел http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.ml.evaluation.BinaryClassificationEvaluator, который поддерживает мл вместо мл Пб, например, Datasets. До сих пор я не мог успешно интегрировать xgboost4j в конвейер.

ответ