You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于scikit-learn F1分数默认阈值及无法设置阈值的问询

关于scikit-learn/Hugging Face F1分数的阈值问题

首先明确:scikit-learn的f1_score函数本身没有阈值参数,因为它的输入要求是已经完成类别判定的y_pred(预测标签),而非模型输出的概率或logits值。阈值的设置是在将模型输出转换为类别标签的环节,而非F1分数计算环节。

核心细节:

  • f1_score的作用是基于已有的真实标签和预测标签,计算精确率与召回率的调和平均,它不参与类别判定过程,自然不需要阈值参数。
  • 你感知到的“默认阈值”,其实是模型/工具链在将概率转换为类别时使用的默认值:
    • 二分类任务:scikit-learn的分类器(如LogisticRegression)、Hugging Face的分类pipeline或Trainer默认使用0.5作为阈值——概率≥0.5被判定为正类,<0.5为负类。
    • 多分类任务:默认取概率最大的类别(等价于argmax操作,无固定数值阈值)。

如何自定义阈值计算F1?

如果需要调整阈值,你需要先手动将模型输出的概率/logits转换为自定义标签,再传入F1计算函数:

from evaluate import load_metric
import numpy as np

# 加载F1指标
f1_metric = load_metric("f1")
# 假设y_true是真实标签,model_prob是模型输出的正类概率(二分类场景)
y_true = [1, 0, 1, 1, 0]
model_prob = [0.6, 0.3, 0.45, 0.7, 0.2]

# 自定义阈值(比如0.55)
custom_threshold = 0.55
y_pred = np.where(model_prob >= custom_threshold, 1, 0)

# 计算F1分数
result = f1_metric.compute(predictions=y_pred, references=y_true)
print(result)

内容的提问来源于stack exchange,提问作者JohnJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:22:11