当 y_pred 和 y_true 具有不同大小时的精度、召回率、f 分数

vat*_*tob 2 python precision python-2.7 scikit-learn precision-recall

我有两个列表:“A”是列表列表,每个项目都包含预测标签列表“B”是列表列表,每个项目都包含真实标签

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

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

我发现了一些类似的主题,但没有答案Computing precision and recall for两组关键字在NLTK和Scikit中针对不同大小的集合

Viv*_*mar 5

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

另请查看此页面以获取有关多标签分类评分技术的更多信息。

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

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

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
Run Code Online (Sandbox Code Playgroud)