2

Я использую ML Pipeline, что-то вроде:ML Pipeline и метрики: точность, напомним, ППК-ROC, F1Score

VectorAssembler assembler = new VectorAssembler() 
       .setInputCols(columns) 
       .setOutputCol("features"); 
LogisticRegression lr = new LogisticRegression().setLabelCol(targetColumn); 
     lr.setMaxIter(10).setRegParam(0.01).setFeaturesCol("features"); 

Pipeline logisticRegression = new Pipeline(); 
logisticRegression.setStages(new PipelineStage[] {assembler, lr}); 
PipelineModel logisticRegressionModel = logisticRegression.fit(learningData); 

То, что я хочу это способ получить стандартную метрику как Precision, Recall, AUC-ROC, F1-SCORE, ACCURACY на этой модели , Я нашел BinaryClassificationMetrics - но не уверен, совместим ли он вообще. RegressionEvaluator похоже только возврат mse|rmse|r2|mae.

Итак, каков правильный способ извлечения точности, отзыва и т. Д. С ML-трубопроводом?

+0

Не удалось найти полезное решение, так в конечном итоге программирования Precision, Напомним, F1Score и точность вручную (расчет tp, fp, fn, tn) –

ответ

0

как только вы набрали данные, получить прогноз и этикетку и передать, что BinaryClassificationMetrics

что-то, как показано ниже (думал, что это в Скале я надеюсь, что это помогает)

val scoredTestSet = logisticRegressionModel.transform(testSet) 
val predictionLabelsRDD = scoredTestSet.select("prediction", "label").map(r => (r.getDouble(0), r.getDouble(1))) 
val binMetrics = new BinaryClassificationMetrics(predictionAndLabels) 
// binMetrics.areaUnderROC 

другие примеры из https://spark.apache.org/docs/latest/mllib-evaluation-metrics.html#binary-classification

прогноз в этом случае равен 1,0 или 0,0 , вы также можете извлечь вероятность и использовать это вместо прогноза, чтобы binMetrics могли отображать данные для нескольких пороговых значений

1

Пара недостающих ответов Райана выше.

Я могу подтвердить следующие работы (Примечание: мой случай использования был для MultiClass классификации)

val scoredTestSet = model.transform(testSet) 
val predictionLabelsRDD = scoredTestSet.select("prediction", "label").rdd.map(r => (r.getDouble(0), r.getDouble(1))) 
val multiModelMetrics = new MulticlassMetrics(predictionAndLabelsRDD) 
Смежные вопросы