2016-07-05 60 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曲線的數據:元組:(假陽性率,真陽性率)。