首页 > 其他分享 >【sklearn报错解决方案】UndefinedMetricWarning: Precision is ill-defined and being set to 0.0

【sklearn报错解决方案】UndefinedMetricWarning: Precision is ill-defined and being set to 0.0

时间:2023-01-16 18:03:32浏览次数:45  
标签:UndefinedMetricWarning set pred 样本 报错 标签 np array true


出错描述

  使用sklearn.metrics.precision_score计算精确率时,出现报错:​UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in samples with no predicted labels.​

问题原理分析

  精确率计算的是所有样本的平均精确率。而对于每个样本来说,精确率就是预测正确的标签数在整个预测为正确的标签数中的占比。其计算公式为:

【sklearn报错解决方案】UndefinedMetricWarning: Precision is ill-defined and being set to 0.0_sklearn

  例如对于某个样本来说,其真实标签为[0, 1, 0, 1],预测标签为[0, 0, 0, 0]。那么该样本对应的精确率就应该为:(0 + 1 + 0 + 0) / (0 + 0 + 0 + 0),这时就会报错

情况一

  假设有数据:样本数​​batch_size = 5​​​,标签数​​label_num = 4​​​。​​y_true​​​为真实标签,​​y_pred​​为预测标签值。

y_true = np.array([[0, 1, 0, 1],
[0, 1, 1, 0],
[0, 0, 1, 0],
[1, 1, 1, 0],
[1, 0, 1, 1]])

y_pred = np.array([[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 1, 0],
[0, 1, 1, 0],
[0, 1, 0, 1]])

  对照上面给的数据​​y_true​​​、​​y_pred​​​。那么该样本对应的准确率就应该为:
【sklearn报错解决方案】UndefinedMetricWarning: Precision is ill-defined and being set to 0.0_precision_score_02

情况二

  假设数把​​y_pred​​的某一行改为全0,数据如下。

y_true = np.array([[0, 1, 0, 1],
[0, 1, 1, 0],
[0, 0, 1, 0],
[1, 1, 1, 0],
[1, 0, 1, 1]])

y_pred = np.array([[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]])

  对照上面给的数据​​y_true​​​、​​y_pred​​​。那么该样本对应的准确率就应该为:
【sklearn报错解决方案】UndefinedMetricWarning: Precision is ill-defined and being set to 0.0_sklearn_03

情况三

  假设数把​​y_pred​​改为全0,数据如下。

y_true = np.array([[0, 1, 0, 1],
[0, 1, 1, 0],
[0, 0, 1, 0],
[1, 1, 1, 0],
[1, 0, 1, 1]])

y_pred = np.array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])

  对照上面给的数据​​y_true​​​、​​y_pred​​​。那么该样本对应的准确率就应该为:
【sklearn报错解决方案】UndefinedMetricWarning: Precision is ill-defined and being set to 0.0_精确率_04

【注】所以如果有除数为0,sklearn中会默认把数值置为0来计算。

解决办法

  直接忽略警告即可。

import warnings
warnings.filterwarnings("ignore")

【注】一般一个batch_size都会在32-128,所以有个别样本的精确率为0,最后取平均也还能接收,直接忽略警告就行。


标签:UndefinedMetricWarning,set,pred,样本,报错,标签,np,array,true
From: https://blog.51cto.com/u_15942590/6010669

相关文章