(完全解决)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。

来源:音程

物联沃分享整理
物联沃-IOTWORD物联网 » (完全解决)Precision and F-score are ill-defined for being 0.0 in labels with no predicted samples.

发表评论