Ich habe versucht, Precision, Recall by Threshold für LogisticRegression mit LBFGS unter Verwendung von BinaryclassificationMetrics zu berechnen. Ich habe all diese. Ich versuchte herauszufinden, ob ich eine grafische Ausgabe der PR- und AUC-Kurve erhalten könnte.Bewertungsmetrik für binäre Klassifizierung in Spark: AUC- und PR-Kurve
einfügen meine Codes unter:
import org.apache.spark.mllib.classification.LogisticRegressionWithLBFGS
import org.apache.spark.mllib.evaluation.{BinaryClassificationMetrics, MulticlassMetrics}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object log_reg_eval_metric {
def main(args: Array[String]): Unit = {
System.setProperty("hadoop.home.dir", "c:\\winutil\\")
val sc = new SparkContext(new SparkConf().setAppName("SparkTest").setMaster("local[*]"))
val sqlContext = new org.apache.spark.sql.SQLContext(sc);
val data: RDD[String] = sc.textFile("C:/Users/user/Documents/spark-1.5.1-bin-hadoop2.4/data/mllib/credit_approval_2_attr.csv")
val parsedData = data.map { line =>
val parts = line.split(',').map(_.toDouble)
LabeledPoint(parts(0), Vectors.dense(parts.tail))
}
//Splitting the data
val splits: Array[RDD[LabeledPoint]] = parsedData.randomSplit(Array(0.7, 0.3), seed = 11L)
val training: RDD[LabeledPoint] = splits(0).cache()
val test: RDD[LabeledPoint] = splits(1)
// Run training algorithm to build the model
val model = new LogisticRegressionWithLBFGS()
.setNumClasses(2)
.run(training)
// Clear the prediction threshold so the model will return probabilities
model.clearThreshold
// Compute raw scores on the test set
val predictionAndLabels = test.map { case LabeledPoint(label, features) =>
val prediction = model.predict(features)
(prediction, label)
}
// Instantiate metrics object
val metrics = new BinaryClassificationMetrics(predictionAndLabels)
// Precision by threshold
val precision = metrics.precisionByThreshold
precision.foreach { case (t, p) =>
println(s"Threshold: $t, Precision: $p")
}
// Precision-Recall Curve
val PRC = metrics.pr
print(PRC)
}
}
Ausgabe von print (PRC):
UnionRDD[39] at union at BinaryClassificationMetrics.scala:108
Ich bin nicht sicher, was eine Gewerkschaft RDD ist und wie es zu benutzen. Gibt es eine andere Möglichkeit, die grafische Ausgabe zu erhalten? Ich forsche darüber. Jeder Vorschlag wäre großartig.
Die 'Pr' Methode gibt ein RDD von (Precision, Recall) Paare. Vielleicht sollten Sie einige Werkzeuge verwenden, um Graphen mit diesen Punkten auszugeben (Entschuldigung, ich weiß sehr wenig von Scala). –
Ich traf das gleiche Problem, haben Sie das gelöst? –