我有两个清单:
“ A”是列表的列表,每个项目都包含预测标签的列表
“ 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

最佳答案

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

还请检查this page以获取有关多标签分类评分技术的更多信息。

编辑:添加了一些代码,使您的示例数据来自注释。

首先,您需要对数据中所有可用标签的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

关于python - 当y_pred和y_true具有不同大小时,精度,召回率,f得分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42022498/

10-10 05:04