J'essayais de calculer Precision, Recall par Threshold pour LogisticRegressionwithLBFGS en utilisant BinaryclassificationMetrics. J'ai tout ça. J'essayais de comprendre si je pouvais obtenir une sortie graphique de la courbe PR et AUC.Métriques d'évaluation pour la classification binaire dans Spark: courbe AUC et PR
mes codes ci-dessous coller:
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)
}
}
sortie de print (PRC):
UnionRDD[39] at union at BinaryClassificationMetrics.scala:108
Je ne sais pas ce qui est un RDD syndical et comment l'utiliser. Y a-t-il un autre moyen d'obtenir la sortie graphique? Faire mes recherches dessus. Toute suggestion serait géniale.
La méthode 'Pr' renvoie un RDD de (précision, rappel) paires. Peut-être que vous devriez utiliser quelques outils pour produire un graphique avec ces points (désolé je sais très peu de scala). –
J'ai rencontré le même problème, avez-vous résolu cela? –