当前位置: 首页 > 面试题库 >

UndefinedMetricWarning:F得分定义不明确,在没有预测样本的标签中设置为0.0

昌和悦
2023-03-14
问题内容

我收到这个奇怪的错误:

classification.py:1113: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
'precision', 'predicted', average, warn_for)`

但是在我第一次运行时,它也会打印f分数:

metrics.f1_score(y_test, y_pred, average='weighted')

我第二次跑步,它提供的分数没有错误。这是为什么?

>>> y_pred = test.predict(X_test)
>>> y_test
array([ 1, 10, 35,  9,  7, 29, 26,  3,  8, 23, 39, 11, 20,  2,  5, 23, 28,
       30, 32, 18,  5, 34,  4, 25, 12, 24, 13, 21, 38, 19, 33, 33, 16, 20,
       18, 27, 39, 20, 37, 17, 31, 29, 36,  7,  6, 24, 37, 22, 30,  0, 22,
       11, 35, 30, 31, 14, 32, 21, 34, 38,  5, 11, 10,  6,  1, 14, 12, 36,
       25,  8, 30,  3, 12,  7,  4, 10, 15, 12, 34, 25, 26, 29, 14, 37, 23,
       12, 19, 19,  3,  2, 31, 30, 11,  2, 24, 19, 27, 22, 13,  6, 18, 20,
        6, 34, 33,  2, 37, 17, 30, 24,  2, 36,  9, 36, 19, 33, 35,  0,  4,
        1])
>>> y_pred
array([ 1, 10, 35,  7,  7, 29, 26,  3,  8, 23, 39, 11, 20,  4,  5, 23, 28,
       30, 32, 18,  5, 39,  4, 25,  0, 24, 13, 21, 38, 19, 33, 33, 16, 20,
       18, 27, 39, 20, 37, 17, 31, 29, 36,  7,  6, 24, 37, 22, 30,  0, 22,
       11, 35, 30, 31, 14, 32, 21, 34, 38,  5, 11, 10,  6,  1, 14, 30, 36,
       25,  8, 30,  3, 12,  7,  4, 10, 15, 12,  4, 22, 26, 29, 14, 37, 23,
       12, 19, 19,  3, 25, 31, 30, 11, 25, 24, 19, 27, 22, 13,  6, 18, 20,
        6, 39, 33,  9, 37, 17, 30, 24,  9, 36, 39, 36, 19, 33, 35,  0,  4,
        1])
>>> metrics.f1_score(y_test, y_pred, average='weighted')
C:\Users\Michael\Miniconda3\envs\snowflakes\lib\site-packages\sklearn\metrics\classification.py:1113: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)
0.87282051282051276
>>> metrics.f1_score(y_test, y_pred, average='weighted')
0.87282051282051276
>>> metrics.f1_score(y_test, y_pred, average='weighted')
0.87282051282051276

另外,为什么会有尾随'precision', 'predicted', average, warn_for)错误消息?没有开放的括号,为什么它以封闭的括号结尾?我在Windows 10的conda环境中使用Python
3.6.0运行sklearn 0.18.1。


问题答案:

如注释中所述,y_true中的某些标签未出现在y_pred中。特别是在这种情况下,永远不会预测标签“ 2”:

>>> set(y_test) - set(y_pred)
{2}

这意味着该标签没有要计算的F分数,因此这种情况下的F分数被认为是0.0。由于您要求获得平均分数,因此您必须考虑到计算中包括了0分,这就是scikit-
learn向您显示该警告的原因。

这给我带来了您第二次看不到该错误。如前所述,这是一个 警告 ,与python中的错误不同。在大多数环境中,默认行为是仅显示一次特定警告。可以更改此行为:

import warnings
warnings.filterwarnings('always')  # "error", "ignore", "always", "default", "module" or "once"

如果在导入其他模块之前进行了设置,则每次运行代码时都会看到警告。

除了设置之外,没有其他方法可以避免第一次看到此警告warnings.filterwarnings('ignore')。你有什么 可以
做的,就是决定你是不是在没有预测标签的分数感兴趣,然后明确指定标签 兴趣(其中至少有一次是预测标签):

>>> metrics.f1_score(y_test, y_pred, average='weighted', labels=np.unique(y_pred))
0.91076923076923078

在这种情况下,不会显示警告。



 类似资料:
  • 我想为我的项目将文本组件(dayTitle)的字体样式更改为自定义字体。对于设置预定义字体ex:-BOLD,Harmony OS平台允许用户以这种方式设置预定义字体- 有什么办法,我可以设置自定义字体到我的文本组件(一天标题)?

  • 我想设置我的MVC5应用程序不缓存页面为我的登录视图(即,我希望登录视图实际上重新加载,如果我的用户在浏览器中按了‘后退',以便导航到登录页面)。 但这将停止对每个请求上的每个页面进行缓存。我相信有一种方法可以通过路由或过滤器来做到这一点?也许是方法注释?有人能解释一下吗?

  • 问题内容: 过去似乎人们在使用Accept标头时遇到问题,但是我不确定我的问题是否与之相关。使用jQuery 1.4.2,我很难通过来获取JSON 。我可以在Firebug中观察请求/响应,问题的根源似乎是有问题的资源根据Accept标头返回不同的结果。即使文档说应该设置它,在Firebug中它也显示为“ / ”-显然,我想要“ application / json”。这是一个已知的错误?我应该设

  • 问题内容: 我想为单选按钮的选定标签添加样式: HTML: CSS 有什么想法我做错了吗? 问题答案: .radio-toolbar input[type=”radio”] { 首先,您可能想在单选按钮上添加属性。否则,它们不属于同一组,可以检查多个单选按钮。 另外,由于我将标签放置为(单选按钮的)同级标签,因此必须使用和属性将它们关联在一起。

  • 问题内容: 我们可以如下将样式设置为html head标题中的title标签。我试过了没用.. 问题答案: 您可以将CSS应用于元素,但不能应用于属性(因为它适用于“除BASE,BASEFONT,HEAD,HTML,META,PARAM,SCRIPT,STYLE,TITLE”之外的[所有元素)。 我不知道有任何浏览器会应用CSS来在浏览器标签或标题栏中显示标题。 但是,您可以执行以下操作:

  • 问题内容: 我正在尝试设置包括一些基本设置的多个设置文件(开发,生产等)。虽然无法成功。当我尝试运行时,出现以下错误: 这是我的设置模块: 基本设置(包含SECRET_KEY): 设置文件之一: 代码在manage.py: 如果添加到(否则为空),它会神奇地开始工作,但我不明白为什么。任何人都可以向我解释这是怎么回事?它一定是一些python模块魔术。 编辑:如果我从base.py删除此行,一切也