首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spark :回归模型阈值和精度

Spark :回归模型阈值和精度
EN

Stack Overflow用户
提问于 2015-12-11 13:04:56
回答 3查看 2.8K关注 0票数 4

我有逻辑回归模式,其中我显式地将阈值设置为0.5。

代码语言:javascript
运行
复制
model.setThreshold(0.5)

我训练模型,然后我想获得基本的统计数据--精度、召回率等。

这是我在评估模型时所做的:

代码语言:javascript
运行
复制
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的查准率和召回值?

EN

回答 3

Stack Overflow用户

发布于 2016-03-17 22:39:43

在进行预测之前,您需要清除模型阈值。清除阈值使您的预测返回一个分数,而不是分类标签。否则,您将只有两个阈值,即您的标签0.0和1.0。

代码语言:javascript
运行
复制
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来控制点的数量。

票数 5
EN

Stack Overflow用户

发布于 2015-12-11 18:43:57

我认为所有的预测都是0.0或1.0。那么中间阈值将不会有任何影响。

考虑BinaryClassificationMetricsnumBins参数

ROC numBins**:**如果大于0,则内部计算的曲线(ROC曲线、PR曲线)将向下采样到如此多的“

”。如果为0,则不会进行下采样。这很有用,因为对于输入中的每个不同分数,曲线都包含一个点,这可能与输入本身一样大--几百万个点或更多,而几千个点可能完全足以汇总曲线。下采样后,曲线将改为由近似的numBins点组成。点是由相同数量的连续点构成的。每个存储箱的大小是floor(scoreAndLabels.count() / numBins),这意味着最终的存储箱数量可能不完全等于numBins。因此,每个分区中的最后一个仓位可能更小,这意味着在分区边界处可能有额外的样本。

因此,如果您不设置numBins,则将在所有不同的预测值上计算精度。在您的情况下,这似乎只有0.0和1.0。

票数 1
EN

Stack Overflow用户

发布于 2016-04-19 08:50:06

首先,尝试像这样添加更多的numBins (这里的bin是10):

代码语言:javascript
运行
复制
val metrics = new BinaryClassificationMetrics(probabilitiesAndLabels,10);

如果您仍然只有0和1两个阈值,那么请检查以确保您定义predictionAndLabels的方式。如果你不小心提供了(label, prediction)而不是(prediction, label),你可能会遇到这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34216481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档