F-score是不明确的scikit

时间:2018-04-15 14:44:17

标签: python machine-learning scikit-learn precision precision-recall

我知道这个问题已被多次询问,但我对此警告感到困惑,因为我仍然得到了f1分数。对我来说,它不是零。

我已经为微计算了f1score并且它工作正常没有警告。但是当我计算宏的f1score然后它给了我一个警告。我也得到精确分数和召回。两者都不是零。它们有时非常少,例如0.01或0.001。与f1score一样,它也不是零。但我不确定为什么我会收到这个警告。正如我在其他帖子中读到的那样,这可能是因为精度或召回率为零而潜水0/0。但就我而言,我有一些价值而不是零。

这是确切的警告:

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

那么我可以依靠结果并避免警告吗?

1 个答案:

答案 0 :(得分:2)

带有average='macro'

from sklearn.metrics import f1_score y_true = [0, 1, 2, 0, 1, 2] y_pred = [0, 1, 1, 0, 0, 0] f1_score(y_true, y_pred, average='macro') 将首先单独计算每个标签的得分,然后找到未加权的均值。

因此,如果您有多个类(标签)可能会发生,那么其中一个类不存在于预测数据中。在这种情况下,您将获得该(不存在)标签的警告,并且f1将为0。但其他标签仍然会有一些非零价值。所以平均值将是非零的。

例如:

# Output:  0.38888888888888884
  

/usr/local/lib/python2.7/dist-packages/sklearn/metrics/classification.py:1135:UndefinedMetricWarning:F-score定义不明确,在没有预测样本的标签中设置为0.0。 / p>

unnest

在上面的示例中,预测数据不包含标签2,警告就是为此。

现在,关于依赖于此的问题,请参阅相关问题: