precision , recall , f score 当 y_pred & y_true 有不同的尺寸

precision , recall , f score when y_pred & y_true have different sizes

我有两个列表: "A" 是list of lists,每个item包含list of predicted tags "B"是列表的列表,每一项都包含真实的标签

我正在尝试在迭代中使用 scikit-learn 计算精度、召回率、f 分数,A[i] 与 B[i] 相比,但它说

ValueError:发现样本数量不一致的输入变量:[3, 2]

找了一些类似的话题,但是没有答案Computing precision and recall for two sets of keywords in NLTK and Scikit for sets of different sizes

当我们计算这些指标时,我们会将实际值与预测值进行比较。因此,如果您的测试集有 10 个数据点,那么您的模型应该有 10 个预测。

TL;DR A[i] 需要和 B[i].

在维度上保持一致

如果您包含数据的示例,可以将我的答案编辑得更准确!

y_truey_pred size() 必须保持相同的精度和召回率。 y_true[i]y_pred[i] 的大小可能不同。查看 precision_score() and recall_score() 的文档。请注意,您需要将有效值传递给这些方法中的 average 参数。

另请查看 this page 以了解有关多标签分类评分技术的更多信息。

编辑:添加了一些代码,从评论中获取您的示例数据。

首先,您需要 one-hot 对数据中所有可用标签的 y_truey_pred 进行编码。

from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.metrics import recall_score, precision_score

A=[['a','b','c'],['d','e','f','g']]
B=[['a','b'],['d','f','g']]

multibinarizer = MultiLabelBinarizer()

A_new = multi.fit(A).transform(A)
B_new = multi.transform(B)

#average = 'valid strategy for multilabel
precision_score(A_new,B_new,average='samples')
#output -> 1.0
recall_score(A_new, B_new, average='samples')
#output -> 0.70833333333333326