2016-05-26 2 views
1

Я пытался вычислить точность, вспомнить по порогу для LogisticRegressionwithLBFGS с использованием BinaryclassificationMetrics. У меня есть все это. Я пытался выяснить, могу ли я получить графический вывод кривой PR и AUC.Оценка метрик для двоичной классификации в искры: кривая AUC и PR

Оклейка мои коды ниже:

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) 



    } 
} 

выхода из печати (КНР):

UnionRDD[39] at union at BinaryClassificationMetrics.scala:108 

Я не уверен, что это объединение РДД и как использовать его. Есть ли другой способ получить графический вывод. Выполнение моих исследований по этому вопросу. Любое предложение было бы здорово.

+0

Параметр 'pr' метод возвращает RDD из (точности, напомним). Возможно, вам следует использовать некоторые инструменты для вывода графика с этими точками (извините, я очень мало знаю о scala). –

+0

Я встретил ту же проблему, вы решили? –

ответ

1

Вы можете использовать BinaryLogisticRegressionTrainingSummary из пакета spark.ml. Он предоставляет значения PR и ROC из коробки в качестве данных.

Вы можете ввести эти значения для любого рендеринга утилиты, чтобы увидеть определенные кривые. (Любой многострочный участок с х и у значений будет отображать кривые.)

+0

Спасибо, Прашант. Мне нужно использовать фрейм данных здесь. –