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

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

出错描述


  使用sklearn.metrics.precision_score计算精确率时,出现报错:

UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in samples with no predicted labels.

问题原理分析


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

image.png

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

情况一

  假设有数据:样本数batch_size = 5,标签数label_num = 4y_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_truey_pred。那么该样本对应的准确率就应该为:

image.png

情况二

  假设数把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_truey_pred。那么该样本对应的准确率就应该为:

image.png

情况三

  假设数把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_truey_pred。那么该样本对应的准确率就应该为:

image.png

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

解决办法


  直接忽略警告即可。

import warnings
warnings.filterwarnings("ignore")

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

相关文章
|
3月前
|
Linux iOS开发 MacOS
pnpm全局安装报错:Run “pnpm setup“ to create it automatically, or set the global-bin-dir setting, or the PN
pnpm全局安装报错:Run “pnpm setup“ to create it automatically, or set the global-bin-dir setting, or the PN
497 0
eggjs 项目报错 Cookie need secret key to sign and encrypt. Please set config.keys first
eggjs 项目报错 Cookie need secret key to sign and encrypt. Please set config.keys first
228 0
eggjs 项目报错 Cookie need secret key to sign and encrypt. Please set config.keys first
【错误记录】Tinker 热修复示例运行报错 ( Execution failed for task ‘:app:tinkerProcessD‘ . tinkerId is not set!!! )
【错误记录】Tinker 热修复示例运行报错 ( Execution failed for task ‘:app:tinkerProcessD‘ . tinkerId is not set!!! )
245 0
【错误记录】Tinker 热修复示例运行报错 ( Execution failed for task ‘:app:tinkerProcessD‘ . tinkerId is not set!!! )
|
NoSQL MongoDB
启动mongodb报错 Failed to set up listener: SocketException: Address already in use 解决办法
启动mongodb报错 Failed to set up listener: SocketException: Address already in use 解决办法
669 1
|
4月前
|
分布式计算 Hadoop 大数据
|
5月前
|
Java Spring
Spring Boot 启动报错解决:No active profile set, falling back to default profiles: default
Spring Boot 启动报错解决:No active profile set, falling back to default profiles: default
116 0
|
druid Java 数据库连接
java报错Error attempting to get column ‘XXX’ from result set. Cause: java.sql.怎么解决?
java报错Error attempting to get column ‘XXX’ from result set. Cause: java.sql.怎么解决?
1975 0
java报错Error attempting to get column ‘XXX’ from result set. Cause: java.sql.怎么解决?
|
8月前
|
缓存
npm install 报错 ‘proxy‘ config is set properly. See: ‘npm help config‘
npm install 报错 ‘proxy‘ config is set properly. See: ‘npm help config‘
425 0
|
8月前
|
JavaScript
关于js报错Cannot set properties of undefined (setting ‘innerHTML‘)的问题
关于js报错Cannot set properties of undefined (setting ‘innerHTML‘)的问题
156 0
|
9月前
|
C++
下载node-gyp依赖包报错:gyp ERR! find VS msvs_version not set from command line or npm config
就是有一点需要注意,我这里安装vs的时候,可用里面没有vs社区版2017,只有2022,只能安装了2022