当y_pred& amp;精度,召回,f得分时y_true有不同的大小

时间:2017-02-03 10:50:01

标签: python python-2.7 scikit-learn precision precision-recall

我有两个清单: “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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

<强> TL; DR A [i]需要在尺寸上与B [i]一致。

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