我知道这个问题已经被问过很多次,但我对这个警告感到困惑,因为我仍然得到了f1分数。对我来说,它不是零。
我已经计算了微观的f1分数,它运行得很好,没有警告。但当我计算宏观的f1分数时,它会给我一个警告。我也得到了精确度和召回率的分数。两者都不是零。它们非常小,例如有时是0.01或0.001。f1分数也不是零。但我不确定为什么我会得到这个警告。正如我在其他帖子中读到的那样,这可能是由于你正在进行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)
那么我可以依赖这个结果并忽略这个警告吗?
回答:
f1_score
使用 average='macro'
时,会首先为每个标签单独计算分数,然后再找出它们的非加权平均值。
因此,如果你有多个类别(标签),其中一个在预测数据中不存在,那么你会为那个(缺失的)标签得到警告,并且该标签的f1值将为0。但其他标签仍然会有一些非零值。因此,平均值将是非零的。
例如:
from sklearn.metrics import f1_scorey_true = [0, 1, 2, 0, 1, 2]y_pred = [0, 1, 1, 0, 0, 0]f1_score(y_true, y_pred, average='macro')
/usr/local/lib/python2.7/dist-packages/sklearn/metrics/classification.py:1135: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.
# Output: 0.38888888888888884
在上面的例子中,预测数据不包含标签2,警告就是针对这个标签的。
现在,关于是否可以依赖这个结果的问题,请查看相关问题: