我有逻辑回归模式,我明确地将阈值设置为 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 来控制点数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)