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

使用Sklearn评估accuracy/precision/recall/f1结果一致,如何解决?

问题原因与解决方法

为什么四个指标结果相同?

你在计算precision、recall、f1时使用了average='micro'参数,在多分类(或二分类)任务中,micro平均的计算逻辑会让这三个指标和accuracy完全等价:

  • micro-precision = 全局正确预测数 / 总预测数(总预测数等于总样本数,每个样本对应一个预测结果)
  • micro-recall = 全局正确预测数 / 总真实样本数(总真实样本数就是总样本数)
  • 基于上述两个值计算的micro-F1自然也等于accuracy
    因此最终四个指标结果完全一致。

怎么解决?

根据你的任务类型选择合适的average参数:

  • 二分类任务:直接去掉average参数(默认值为binary),会自动计算正类的precision、recall、f1,结果会和accuracy产生差异。
  • 多分类任务:
    • 使用average='macro':计算每个类的指标后取算术平均,不考虑类别的样本数量差异
    • 使用average='weighted':按每个类的样本数量加权计算平均,适合样本不均衡的场景
    • 不指定average参数:返回每个类的precision、recall、f1数组,能查看单个类别的表现

修改后的代码示例(以weighted平均为例)

accuracy = accuracy_score(y_test, predictions)
precision = precision_score(y_test, predictions, average='weighted')
recall = recall_score(y_test, predictions, average='weighted')
f1 = f1_score(y_test, predictions, average='weighted')

print("Accuracy: ", accuracy)
print("precision: ", precision)
print("recall: ", recall)
print("f1: ", f1)

查看每个类别的指标示例

precision_per_class = precision_score(y_test, predictions, average=None)
recall_per_class = recall_score(y_test, predictions, average=None)
f1_per_class = f1_score(y_test, predictions, average=None)

print("每个类的precision: ", precision_per_class)
print("每个类的recall: ", recall_per_class)
print("每个类的f1: ", f1_per_class)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:10:24