scikit-learn - 为什么计算宏观平均值的不同方法会得到不同的精度、召回率和 f1 分数
问题描述
我使用两种方法计算了我的分类的 P、R 和 F1 的宏观平均值。方法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'))
给出了这个结果:
Macro-Average Precision: 0.6822
Macro-Average Recall: 0.7750
Macro-Average F1: 0.7094
方法二是:
print(classification_report(y_true, y_pred))
给出了这个结果:
precision recall f1-score support
0 0.55 0.25 0.34 356
1 0.92 0.96 0.94 4793
2 0.85 0.83 0.84 1047
accuracy 0.90 6196
macro avg 0.78 0.68 0.71 6196
weighted avg 0.89 0.90 0.89 6196
我希望这两种方法的输出是相同的,因为它们是在同一次运行中同时生成的。有人可以解释为什么会发生这种情况,或者某处是否有错误?
解决方案
据我从分类报告结果中可以看出,您有多个类。
如果您查看度量模块中单个函数的文档,默认参数会将类“1”视为默认的正类。
我认为可能发生的情况是,在您的第一次计算中,它是一个对所有计算的计算(0 和 2 是负类,1 是正类)。在第二种情况下,您实际上是在考虑真正的多类情况。
推荐阅读
- python - 如何在 Django 视图中使用 POST 请求登录?
- c# - 在 .Net Core 项目中使用利用旧样式“appSettings”的库
- ios - 删除字符串开头的非字母字符
- mysql - 给出日期的时间
- laravel - 当输入是数组时,Laravel 中的“存在”验证问题
- python - 如何获取不在 Discord 公会中的用户的用户名?
- linq - WhenAll 结果异步中的 Distinct/GroupBy
- c++ - 防止编译器分离函数的指令
- odoo - AssertionError: Element odoo has extra content: 记录,第 3 行 - - - Odoo13
- c# - 即使数据发生变化,使用实时数据库也能获得相同的结果