(完全解决)Precision and F-score are ill-defined for being 0.0 in labels with no predicted samples.

首先,这个错误是在使用如下包才出现的。

from sklearn.metrics import classification_report,accuracy_score

然后,运行我的其他代码,警告如下:

UndefinedMetricWarning:
Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior._warn_prf(average, modifier, msg_start, len(result))

一开始没看懂在说什么,后来才发现:正如报错所说,你的模型的分类结果中有一类是没有被预测的,拿2分类来说,你的模型全部预测成了1或者0,就会报上述错误。例如:

实际标签 1,1,1,1,1,1,0,0
预测标签 0,0,0,0,0,0,0,0

先说解决办法,然后再说原因,由于原因比较冗长,所以如果你时间有限,看完解决办法就可以走了。


解决办法

老办法,警告并不是报错,我们选择屏蔽。在开头加上如下语句:
import warnings
warnings.filterwarnings("ignore")

原因

问题来了,我们的模型预测成1或者0关 sklearn 什么事呢?这是因为如果某个类别没有被预测,Macro-F1会有除0的操作,所以才警告你一下。强烈建议你看看Macro-F1的计算方式,因为这个太基础了。

请看,Micro-F1和Macro-F1详解

我的情况如下:
在这里插入图片描述
大家可以根据我上面给的那篇文章分别计算一下两个类别的macro-f1,也就是上面两行,最后一列的support是指真实标签两类样本的数量。

至于macro avg就是上面两行相加除以二,也就是上面两行的权重各为0.5.
而weighted avg就是上面两行的权重各为类别比例,即58/100,42/100。

  • 41
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值