我有两个清单: “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
答案 0 :(得分:2)
y_true
和y_pred
size()必须保持相同才能进行精确度和召回。 y_true[i]
和y_pred[i]
的大小可能不同。查看precision_score()
和recall_score()
的文档。请注意,您需要在这些方法中将有效值传递给average
参数。
另请查看this page以获取有关多标签分类评分技术的更多信息。
修改:添加了一些从评论中获取示例数据的代码。
首先,您需要对y_true
和y_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
答案 1 :(得分:0)
当我们计算这些指标时,我们会将实际值与预测值进行比较。因此,如果您的测试集有10个数据点,则应该有10个预测来自您的模型。
<强> TL; DR 强> A [i]需要在尺寸上与B [i]一致。
如果您包含数据的示例,可以编辑我的答案更精确!