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

为何两种宏平均计算方法得到的Precision、Recall、F1值不同?

问题分析:两种宏平均指标计算结果不一致的原因

嘿,这个问题的根源其实很简单——你在方法1的sklearn指标函数里,把真实标签和预测标签的参数顺序搞反了!

核心问题:sklearn指标函数的参数顺序

在scikit-learn中,所有分类指标函数(比如precision_score、recall_score、f1_score)的参数顺序都是固定的:
第一个参数是 y_true(真实标签),第二个参数是 y_pred(模型预测的标签)。

你方法1里的代码是这样的:

print("Macro-Average Precision:", metrics.precision_score(predictions, test_y, average='macro'))
print("Macro-Average Recall:", metrics.recall_score(predictions, test_y, average='macro'))
print("Macro-Average F1:", metrics.f1_score(predictions, test_y, average='macro'))

这里你把predictions(预测标签)放在了第一个位置,test_y(真实标签)放在了第二个位置,完全搞反了参数顺序!

而方法2里的classification_report(y_true, y_pred)是正确的参数顺序,所以两者的计算逻辑完全不同,结果自然不一致。

验证与修正

把方法1的参数顺序调换过来,改成正确的写法:

print("Macro-Average Precision:", metrics.precision_score(test_y, predictions, average='macro'))
print("Macro-Average Recall:", metrics.recall_score(test_y, predictions, average='macro'))
print("Macro-Average F1:", metrics.f1_score(test_y, predictions, average='macro'))

这样计算出来的结果就会和classification_report里的macro avg完全一致了——你看报告里的macro avg是precision 0.78、recall 0.68、f1 0.71,而你之前方法1的结果是precision 0.68、recall 0.77,刚好是把precision和recall的数值互换了,这也完全符合参数顺序颠倒后的结果特征。

总结

这只是一个容易犯的小细节错误,记住sklearn的分类指标函数都是真实标签在前,预测标签在后的规则,就不会再出现这类问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:33:07