Как добавить пользовательские метрики для оценки Mlib спарк? - PullRequest
0 голосов
/ 25 октября 2018

Искровая версия 2.3.1.Библиотека

Spark-Mlib предоставляет класс BinaryClassificationEvaluator ( BinaryClassificationEvaluator.scala ) для оценки алгоритма, а также может использоваться для поиска в гирде.Но это предполагает только две метрики

  val metric = $(metricName) match {
  case "areaUnderROC" => metrics.areaUnderROC()
  case "areaUnderPR" => metrics.areaUnderPR()
  //what i want todo
  case "areUnderXX"=> myCustomMetric()
}

Я пытаюсь добавить больше, но у BinaryClassificationEvaluator есть некоторые члены, для которых установлено значение private, поэтому я не могу просто расширить его.Вот код, который нельзя просмотреть вне пакета:

SchemaUtils.checkColumnTypes(schema, $(rawPredictionCol), Seq(DoubleType, new VectorUDT))
SchemaUtils.checkNumericType(schema, $(labelCol))

Этот код выполняет некоторую проверку типа, поэтому, если я удалю его, это будет обходной путь.Но, кажется небезопасным и безобразным.Так есть ли другой способ сделать это?любая помощь будет оценена!

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете использовать MulticlassMetrics.Это обеспечивает больше метрик.Например, используя DataFrame с вашими метками и прогнозами:

+---------+----------+
|label    |prediction|
+---------+-----+----+
|   1.0   |    0.0   |
|   0.0   |    0.0   |
+---------+----------+

Вы должны pivot свой фрейм данных для поля label

val metrics = df.select("prediction", labelName)
  .as[(Double, Double)]
  .rdd

val multim = new MulticlassMetrics(metrics)
val labels = multim.labels

val accuracy = multim.accuracy

println("Summary Statistics")
println(s"Accuracy = $accuracy")

labels.foreach { l =>
  println(s"Precision($l) = " + multim.precision(l))
}

// Recall by label
labels.foreach { l =>
  println(s"Recall($l) = " + multim.recall(l))
}

// False positive rate by label
labels.foreach { l =>
  println(s"FPR($l) = " + multim.falsePositiveRate(l))
}

Есть больше метрик, которые вы можете увидеть в https://spark.apache.org/docs/2.2.0/mllib-evaluation-metrics.html

В зависимости от того, какие метрики вам нужны, вам следует иметь дело с фреймом данных с фреймом данных.Например, если вы хотите вычислить свою матрицу путаницы, вы можете продолжить поворот по столбцу «прогноз», например:

df.groupBy("label").
      pivot("prediction", range)
      .count()
      .na.fill(0.0)
      .orderBy("label)
      .show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...