我有逻辑回归模式,我明确地将阈值设置为0.5.
model.setThreshold(0.5)
我训练模型然后我想得到基本的统计数据 - 精确度,召回等.
这是我在评估模型时所做的事情:
val metrics = new BinaryClassificationMetrics(predictionAndLabels) val precision = metrics.precisionByThreshold precision.foreach { case (t, p) => println(s"Threshold is: $t, Precision is: $p") }
我得到的结果只有0.0和1.0作为阈值,0.5完全被忽略.
以下是上述循环的输出:
阈值为:1.0,精度为:0.8571428571428571
阈值为:0.0,精度为:0.3005181347150259
当我调用metrics.thresholds()时,它也只返回两个值,0.0和1.0.
如何获得阈值为0.5的精度和召回值?
您需要在进行预测之前清除模型阈值.清算阈值使您的预测返回分数而不是分类标签.如果不是,您将只有两个阈值,即标签0.0和1.0.
model.clearThreshold()
来自predictionsAndLabels的元组看起来应该是这样但(0.6753421,1.0)
不是(1.0,1.0)
看看https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/mllib/BinaryClassificationMetricsExample.scala
如果输入很大,您可能仍希望设置numBins来控制点数.