5

BinaryClassificationMetrics (Mllib) girişleriyle ilgili bir karışıklık var. Apache Spark 1.6.0 uyarınca, tahmin edilen, olasılık (vektör) & rawPrediction (vektör) olan dönüştürülmüş DataFrame'den (RDD[(Double,Double)]) türünde predictedandlabel'i geçmemiz gerekir.Naive Bayes modeli için BinaryClassificationMetrics değerlendirmesinde tahmin edilen ve etiket sütunları nasıl verilir

Öngörülen ve etiket sütunlarından RDD [(Çift, Çift)] oluşturdum. NavieBayesModel üzerinde BinaryClassificationMetrics değerlendirme gerçekleştirdikten sonra, ROC, PR vb. Alabiliyorum. Ancak değerler sınırlıdır, bundan elde edilen değeri kullanarak eğri çizemiyorum. Roc 4 değer içerir ve PR 3 değeri içerir.

o PredictedandLabel hazırlamanın doğru yolu mu yoksa rawPrediction sütun ya da bunun yerine Öngörülen sütunun Olasılık sütun kullanmak gerekiyor?

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))) 

Ve değerlendirmek:

+1

'ham olasılıklarını BinaryClassificationMetrics' ve sonra noktalarının sayısını ayarlamak için' BinaryClassificationMetrics' oluştururken kutularının sayısını ayarlayın. Spark tarafından üretilen bir modeli kullanırken (LogisticRegressionModel gibi), tüm spektrum değerlerini elde etmek için eşiği temizlemeniz gerekir. –

+0

@Hawknight. Soruyu ** rawProbability ** yerine ** rawPrediction ** ile düzenledik. NavieBayesModel kullanmam gereken bir senaryo var, bu modelde geçersiz eşik işlevi kullanılamaz. Umarım bu yorumda bahsettiğim aynı sütuna işaret ettiğinizi umuyoruz. ** Olasılık ** –

+0

@Hawknight NavieBayesModel'den açıkça eşik temizlemek için herhangi bir yol var mı? –

cevap

1

böyle hazırlayın tahminler gibi durumda da sadece 0 veya kovalar 1 sayı olabilir düşüktür

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

new BinaryClassificationMetrics(preds, 10).roc 

edin. Bunun gibi daha karmaşık verileri deneyin:

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