我知道这个问题已被多次询问,但我对此警告感到困惑,因为我仍然得到了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)
那么我可以依靠结果并避免警告吗?
答案 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,警告就是为此。
现在,关于依赖于此的问题,请参阅相关问题: