2016-07-05 61 views
4

我试图在图中绘制ROC曲线和Precision-Recall曲线。点来自Spark Mllib BinaryClassificationMetrics。通过以下星火https://spark.apache.org/docs/latest/mllib-evaluation-metrics.html如何绘制来自BinaryClassificationMetrics的ROC曲线和精度 - 召回曲线

[(1.0,1.0), (0.0,0.4444444444444444)] Precision 
[(1.0,1.0), (0.0,1.0)] Recall 
[(1.0,1.0), (0.0,0.6153846153846153)] - F1Measure  
[(0.0,1.0), (1.0,1.0), (1.0,0.4444444444444444)]- Precision-Recall curve 
[(0.0,0.0), (0.0,1.0), (1.0,1.0), (1.0,1.0)] - ROC curve 

回答

3

它看起来像你有类似的问题,我所经历的。您需要将参数翻转到Metrics构造函数,或者传递概率而不是预测。因此,例如,如果您使用的是BinaryClassificationMetricsRandomForestClassifier,则根据this page(在输出下),存在“预测”和“概率”。

然后由此初始化指标:

new BinaryClassificationMetrics(predictionsWithResponse 
     .select(col("probability"),col("myLabel")) 
     .rdd.map(r=>(r.getAs[DenseVector](0)(1),r.getDouble(1)))) 

随着用于提取1类的概率DenseVector电话。对于实际的绘图,这取决于你(许多好的工具),但至少你会在曲线上(除了端点)得到超过1分的点数。

而如果它不是明确:

metrics.roc().collect()会给你的ROC曲线的数据:元组:(假阳性率,真阳性率)。