我有两个清单:
“ 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_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
关于python - 当y_pred和y_true具有不同大小时,精度,召回率,f得分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42022498/