UndefinedMetricWarning: F-Score Error
使用 scikit-learn 的metrics.f1_score 计算 F-score 时,用户可能会遇到警告:
“UndefinedMetricWarning:F 分数为定义不明确,并且在没有预测样本的标签中设置为 0.0。”
理解警告
当真实标签 (y_test) 中的某些标签时,会出现此警告不会出现在预测标签 (y_pred) 中。在这种情况下,无法计算这些不可预测标签的 F 分数,并假定为 0.0。
示例
考虑以下示例,其中标签“2”预测中不存在:
y_test = [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 = [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] print(metrics.f1_score(y_test, y_pred, average='weighted'))
此代码将生成警告。
为什么只是有时?
该警告仅在第一次计算 F 分数时出现,因为大多数 Python 环境仅显示一次特定警告。但是,可以使用 warnings.filterwarnings('always') 更改此行为。
如何避免警告
要避免看到警告,您可以设置warnings.filterwarnings('ignore') 在导入 scikit-learn 之前或在计算 F-score 时显式指定您感兴趣的标签,如如下:
# Ignore warnings warnings.filterwarnings('ignore') metrics.f1_score(y_test, y_pred, average='weighted') # Explicitly specify labels unique_labels = np.unique(y_pred) metrics.f1_score(y_test, y_pred, average='weighted', labels=unique_labels)
以上是为什么 Scikit-learn 的 F1-Score 会产生'UndefinedMetricWarning”?的详细内容。更多信息请关注PHP中文网其他相关文章!