首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向spark mlib evaluator添加自定义指标?

如何向spark mlib evaluator添加自定义指标?
EN

Stack Overflow用户
提问于 2018-10-25 23:10:15
回答 1查看 374关注 0票数 1

spark版本是2.3.1。

Spark-Mlib库提供了一个BinaryClassificationEvaluator (BinaryClassificationEvaluator.scala)类来评估算法,也可以用于网格搜索。但它只假设有两个指标

代码语言:javascript
复制
  val metric = $(metricName) match {
  case "areaUnderROC" => metrics.areaUnderROC()
  case "areaUnderPR" => metrics.areaUnderPR()
  //what i want todo
  case "areUnderXX"=> myCustomMetric()
}

我尝试添加更多,但是BinaryClassificationEvaluator有一些成员被设置为private,所以我不能简单地扩展它。下面是不能在包之外查看的代码:

代码语言:javascript
复制
SchemaUtils.checkColumnTypes(schema, $(rawPredictionCol), Seq(DoubleType, new VectorUDT))
SchemaUtils.checkNumericType(schema, $(labelCol))

这些代码做了一些类型检查,所以如果我删除它,它可以解决。但是,它似乎是不安全和丑陋的。那么,有没有别的办法呢?任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2018-10-25 23:51:22

您可以使用MulticlassMetrics。它提供了更多的指标。以使用带有标签和预测的DataFrame为例:

代码语言:javascript
复制
+---------+----------+
|label    |prediction|
+---------+-----+----+
|   1.0   |    0.0   |
|   0.0   |    0.0   |
+---------+----------+

您必须为数据帧 label字段设置pivot

代码语言:javascript
复制
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中查看更多指标

根据您需要的指标类型,也许您应该使用数据帧来处理数据帧。例如,如果你想计算你的混淆矩阵,你可以在“预测”列上继续旋转,如下所示:

代码语言:javascript
复制
df.groupBy("label").
      pivot("prediction", range)
      .count()
      .na.fill(0.0)
      .orderBy("label)
      .show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52992639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档