0
我尝试计算f1_score
,但是当我使用sklearn f1_score
方法时,我得到了一些警告。如何计算多分数分类的F1分数?
我有一个预测多标签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
当我使用的average="samples"
代替"weighted"
我得到(0.1,1.0,0.1818 ......,无)。 "weighted"
选项对多标签问题没有用处,或者如何正确使用f1_score
方法?
使用average="weighted"
时,我也得到一个警告:
“UndefinedMetricWarning:召回和F-分数是不明确的和被设置为0.0的标签没有真正样本”
嗨我的数组与np.zeros((1,5))有形状(1,5)我刚刚写了一个评论给一个例子如何一个样本看起来像但它是实际的形式像这样[[1 ,0,0,0,0] ...]。问题是f1_score与平均值=“微”/“宏”一起工作,但它不与“加权”。所以我的问题是“权重”选项不适用于多标签,还是必须在f1_score函数中设置其他选项,如标签/ pos_label。 –
请阅读答案。您无法使用形状为(1,5)的目标变量。在这种情况下,即使'微'或'宏'平均,你的'f1_score'也不起作用。 –
当我使用ravel来获得形状(5,)时,它将一个值作为一个样本使用,因此它不适用于多标签,例如当我尝试使用平均值=“样本”的形状时,出现错误“基于样本的精度,回忆,fscore在多标签分类之外无效”。我得到了微观和宏观形状(1,5)的工作结果(它们是正确的)唯一的问题是选项average =“weighted” –