如何消除所有sklearn警告

5
我正在使用sklearn中的F1_score指标。对于一些训练数据集,y=1(罕见情况)的总数为零,F1_score为零,这是正常的。但是sklearn会给出以下警告:
"UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples".
有人知道如何消除这个警告吗?通常情况下,我们能否消除sklearn中所有类型的警告?

这里接受的答案似乎有你感兴趣的信息:https://dev59.com/IFgQ5IYBdhLWcg3wMhBJ - Jason Baumgartner
我检查了所有的内容,但是没有找到我想要的。 - saunter
2个回答

16

你可以通过 Python 中的 warnings 模块来轻松地忽略警告,就像这样。

import warnings
warnings.filterwarnings('ignore') 
例如,
from sklearn.metrics import f1_score

yhat = [0] * 100
y = [0] * 90 + [1] * 10

print(f1_score(y, yhat))

这会抛出警告。为避免这种情况,请使用:

from sklearn.metrics import f1_score

import warnings
warnings.filterwarnings('ignore') 

yhat = [0] * 100
y = [0] * 90 + [1] * 10

print(f1_score(y, yhat))

这不会显示警告。


2
谢谢你的信息。实际上我在代码开头有一行 "warnings.filterwarnings('ignore')",但是警告仍然弹出。我猜测这个 "ignore" 只控制 Python 模块的警告而不是 sklearn 的警告。在你的例子中,你可能需要交换 f1_score 函数中的 y 和 yhat,以查看效果,因为第一个参数是 ytrue,第二个参数是 ypred。 - saunter
1
@saunter,我已经尝试了两种方法。但是我的机器上没有任何警告。如果不使用warnings.filterwarnings('ignore'),我会收到警告,但是使用该代码后,我就不会再收到任何警告了。 - Sreeram TP
很高兴听到它有所帮助。 - Sreeram TP
2
我遇到了和@saunter提到的相同问题。 - yash
它对我不起作用。 - Antonio Sesto

0

我在这里分享我的经验,因为一些用户似乎无法通过使用 warnings.filterwarnings('ignore') 解决方案来消除警告,如 @sreeram-tp 所建议。

如果您的情况是这样的,并且您正在使用并行作业(即 n_jobs 参数不等于 1)执行 GridSearchCVRandomizedSearchCV,那么这是因为由 joblib 生成的作业没有继承当前作业中设置的相同警告过滤器。有关更多信息,请参阅 answer by @caseygrun

在我的情况下,为了解决这个问题,我必须同时应用这两个解决方案:

# Removes warnings in the current job
warnings.filterwarnings("ignore")
# Removes warnings in the spawned jobs
os.environ['PYTHONWARNINGS']='ignore'

请注意,仅设置操作系统环境变量是不够的。两个命令都是必需的。
编辑:我知道问题的情况与f1_score指标有关,但不幸的是其他可能更合适的帖子已经关闭。由于我没有足够的积分来评论,所以我不得不在一个类似的问题下添加这个答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接