如何从BinaryClassificationMetrics绘制ROC曲线和精确回忆曲线

时间:2016-07-05 16:06:56

标签: apache-spark machine-learning apache-spark-mllib

我试图在图中绘制ROC曲线和Precision-Recall曲线。这些点是从Spark Mllib BinaryClassificationMetrics生成的。通过以下Spark https://spark.apache.org/docs/latest/mllib-evaluation-metrics.html

[(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

1 个答案:

答案 0 :(得分:6)

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

然后初始化您的度量标准:

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

使用DenseVector调用来提取1类的概率。

至于实际的绘图,这取决于你(很多很好的工具),但至少你会在曲线上获得超过1点(除了端点)。

如果不清楚:

metrics.roc().collect()将为您提供ROC曲线的数据:元组:(误报率,真阳性率)。