【问题标题】:Does Apache Spark MLlib 1.3.1 correctly compute multi-class precision and recall values?Apache Spark MLlib 1.3.1 是否正确计算多类精度和召回值?
【发布时间】:2015-10-19 22:16:10
【问题描述】:

刚刚使用简单的通用(标签、预测)输入尝试了 Spark MLlib 1.3.1 中的 MulticlassMetrics 功能

(label, predicition)
( 1.0 , 1.0)
( 2.0 , 2.0)
( 3.0 , 3.0)
( 4.0 , 3.0)
( 4.0 , 4.0)
( 4.0 , 4.0)

我得到(Scala 代码 sn-p 显示)

    labelsAndPredictions.foreach(println)

    val metrics = new MulticlassMetrics(labelsAndPredictions)
    println("confusionMatrix: ")        
    println(metrics.confusionMatrix)

    println("Precision: ")
    metrics.labels.foreach( x => println(x.toInt + " " + metrics.precision(x.toInt)) )

    println("Recall: ")
    metrics.labels.foreach( x => println(x.toInt + " " + metrics.recall(x.toInt)) )       

精度结果值

精度:

1   1.0
2   1.0
3   1.0
4   0.6666666666666666 

这似乎与人们的预期不一致:

1   1.0
2   1.0
3   0.5
4   1.0

精度: 给定所有预测的标签(对于给定的 X 类),有多少实例被正确预测?(更多信息见:http://www.text-analytics101.com/2014/10/computing-precision-and-recall-for.html#sthash.OTmBn0Vb.dpuf) p>

所以对于类标签 4,我希望

prec(4) = 1.0 (2 out of 2 are correct)

对于类标签 3,我希望

prec(3) = 0.5 (1 out of 2 are correct).

如果我在同一个数据集上调用 MLlib 召回(),我会得到预期的(正确的)精度结果。

会不会是 MLlib 中的precision() 和recall() 目前被错误地互换了?

任何输入,评论将不胜感激。谢谢!

【问题讨论】:

  • 最新版本是 1.4.1 所以也许你可以试试看看那里发生了什么

标签: apache-spark machine-learning apache-spark-mllib


【解决方案1】:

问题在于MulticlassMetrics 需要predictionAndLabels,即(prediction, label) 对的RDD。反之亦然,这就是精度和召回率颠倒过来的原因。

http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.mllib.evaluation.MulticlassMetrics

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 2012-11-26
    • 2020-02-23
    • 2014-11-20
    • 1970-01-01
    • 2020-04-16
    • 2020-10-22
    • 2018-08-13
    • 2015-12-05
    相关资源
    最近更新 更多