apache-spark - Spark : regression model threshold and precision

标签 apache-spark apache-spark-mllib

我有逻辑回归模式,我明确地将阈值设置为 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()

来自预测和标签的元组应该看起来像 (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 来控制点数。

关于apache-spark - Spark : regression model threshold and precision,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34216481/

相关文章:

apache-spark - 为什么poseexplode 失败并显示 "AnalysisException: The number of aliases supplied in the AS clause does not match the number of columns..."?

apache-spark - PySpark无法通过sparkContext/hiveContext读取Hive ORC事务表?我们可以使用Pyspark更新/删除配置单元表数据吗?

scala - Spark MLLib线性回归模型截距始终为0.0?

python - 在 pyspark 中转换 ALS 的输入数据

scala - 检查列数据类型并仅在 Spark SQL 中对 Integer 和 Decimal 执行 SQL

java - Spark 如何实现任务间的内存公平?

sql - 运行多个SQL查询并测试是否通过Spark Scala

apache-spark - Spark MLLib : convert arbitrary,稀疏特征到固定长度向量

Scala 向量标量乘法

scala - 如何创建仅给出开始和结束以及步骤数的非线性数字序列