5

Ich habe eine Verwirrung über BinaryClassificationMetrics (Mllib) Eingänge. Gemäß Apache Spark 1.6.0 müssen wir vorhergesagt und die Bezeichnung des Typs (RDD[(Double,Double)]) aus dem transformierten Datenrahmen übergeben, der vorhergesagt hat, Wahrscheinlichkeit (Vektor) & rawPrediction (Vektor).Wie vorhergesagt und Label Spalten in BinaryClassificationMetrics Auswertung für Naive Bayes Modell

Ich habe RDD [(Double, Double)] aus Predicted und Label-Spalten erstellt. Nach der Durchführung BinaryClassificationMetrics Auswertung auf NavieBayesModel, kann ich ROC, PR etc. abrufen. Aber die Werte sind begrenzt, ich kann die Kurve nicht mit dem daraus erzeugten Wert plotten. Roc enthält 4 Werte und PR enthält 3 Werte.

Ist es der richtige Weg PredictedandLabel der Vorbereitung oder benötige ich rawPrediction Spalte oder Wahrscheinlichkeit Spalte statt Prognostizierte Spalte zu benutzen?

+1

Sie versuchen sollten, geben 'BinaryClassificationMetrics' die rohen Wahrscheinlichkeiten und stellen Sie dann eine Reihe von Fächern, wenn' BinaryClassificationMetrics' Erstellen der Anzahl der Punkte einzustellen. Wenn Sie ein Modell verwenden, das von Spark generiert wurde (wie ein LogisticRegressionModel), müssen Sie den Schwellenwert löschen, um das gesamte Wertespektrum zu erhalten. –

+0

@Hawknight. Bearbeitet die Frage mit ** rawPrediction ** anstelle von ** rowProbability **. Ich habe ein Szenario, das ich NavieBayesModel verwenden muss, ist in diesem Modell keine klare Schwellenwertfunktion verfügbar. Ich hoffe, dass Sie zu der gleichen Spalte angeben, die ich in diesem Kommentar erwähne, nicht die ** Wahrscheinlichkeit ** –

+0

@Hawknight Gibt es eine Möglichkeit, Schwelle ausdrücklich von NavieBayesModel zu löschen. –

Antwort

1

wie folgt vorbereiten:

import org.apache.spark.mllib.linalg.Vector 
import org.apache.spark.mllib.classification.{NaiveBayes, NaiveBayesModel} 

val df = sqlContext.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt") 
val predictions = new NaiveBayes().fit(df).transform(df) 

val preds = predictions.select("probability", "label").rdd.map(row => 
    (row.getAs[Vector](0)(0), row.getAs[Double](1))) 

und bewerten:

import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics 

new BinaryClassificationMetrics(preds, 10).roc 

Wenn Vorhersagen sind nur 0 oder 1 Anzahl der Eimer kann wie in Ihrem Fall niedriger sein. Probieren Sie komplexe Daten wie folgt aus:

val anotherPreds = df1.select(rand(), $"label").rdd.map(row => (row.getDouble(0), row.getDouble(1))) 
new BinaryClassificationMetrics(anotherPreds, 10).roc 
Verwandte Themen