【发布时间】: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