Kyl*_*oN- 6 metrics scikit-learn multilabel-classification precision-recall
我尝试计算f1_score但在使用 sklearnf1_score方法时在某些情况下会收到一些警告。
我有一个预测的多标签 5 类问题。
import numpy as np
from sklearn.metrics import f1_score
y_true = np.zeros((1,5))
y_true[0,0] = 1 # => label = [[1, 0, 0, 0, 0]]
y_pred = np.zeros((1,5))
y_pred[:] = 1 # => prediction = [[1, 1, 1, 1, 1]]
result_1 = f1_score(y_true=y_true, y_pred=y_pred, labels=None, average="weighted")
print(result_1) # prints 1.0
result_2 = f1_score(y_true=y_ture, y_pred=y_pred, labels=None, average="weighted")
print(result_2) # prints: (1.0, 1.0, 1.0, None) for precision/recall/fbeta_score/support
Run Code Online (Sandbox Code Playgroud)
当我使用average="samples"而不是"weighted"我得到 (0.1, 1.0, 0.1818 ..., None) 时。该"weighted"选项对多标签问题没有用,或者我如何f1_score正确使用该方法?
使用时我也会收到警告average="weighted":
“UndefinedMetricWarning:召回率和 F 分数定义不明确,在没有真实样本的标签中被设置为 0.0。”
如果您稍微添加数据,它会起作用:
y_true = np.array([[1,0,0,0], [1,1,0,0], [1,1,1,1]])
y_pred = np.array([[1,0,0,0], [1,1,1,0], [1,1,1,1]])
recall_score(y_true=y_true, y_pred=y_pred, average='weighted')
>>> 1.0
precision_score(y_true=y_true, y_pred=y_pred, average='weighted')
>>> 0.9285714285714286
f1_score(y_true=y_true, y_pred=y_pred, average='weighted')
>>> 0.95238095238095244
Run Code Online (Sandbox Code Playgroud)
数据表明我们没有遗漏任何真阳性,也没有预测任何假阴性(recall_score等于 1)。然而,我们在第二个观察中预测了一个假阳性,导致precision_score等于 ~0.93。
由于precision_score和参数recall_score都不为零,因此存在。由于示例中缺少信息,我认为您的案例无效。weightedf1_score
| 归档时间: |
|
| 查看次数: |
14871 次 |
| 最近记录: |