2017-02-03 17 views
1

У меня есть два списка: «A» - список списков, каждый элемент содержит список прогнозируемых тегов «B» - список списков, каждый элемент содержащие истинные тегиточность, отзыв, f оценка, когда y_pred & y_true имеют разные размеры

Я пытаюсь вычислить точность, напомним, е балла, используя scikit учиться в итерации A [я] по сравнению с B [я], но он говорит

ValueError: Найдено входных переменных с непоследовательным количество образцов: [3, 2]

Я нашел несколько похожих тем, но ответа не было Computing precision and recall for two sets of keywords in NLTK and Scikit for sets of different sizes

+0

вы пропусканием 'average' аргумент в' precision_score() 'или' recall_score() ', как [описано здесь] (http://scikit-learn.org/stable/modules/generated/sklearn. metrics.precision_score.html) для многозначной классификации? –

ответ

1

y_true и y_pred Размер() должен оставаться таким же, чтобы точность и отзыв. Размер 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 
0

Когда мы вычисляем эти показатели, мы сравниваем фактические значения с прогнозируемыми значениями. Итак, если ваш тестовый набор содержит 10 точек данных, из вашей модели должно быть 10 прогнозов.

TL; DR A [i] должен иметь размерность, совместимую с B [i].

Можете изменить мой ответ, чтобы быть более точным, если вы включите примеры того, как выглядят данные!

+0

Хорошо, мои данные похожи на A = [['a', 'b', 'c'], ['d', 'e', ​​'f', 'g']] и B = [['a', 'b'], ['d', 'f', 'g']], элементы B - это предсказанные теги для элементов A, формулы точности, отзыва и fscore таковы, что они могут быть рассчитаны даже для двух наборов не одного размера – vatob

+0

предсказания и наземные истины имеют сопоставление 1: 1, насколько я знаю ... не уверен, что ваш случай использования –

+0

Тег предсказания в вопросе автоответчика, а не нет картографирования, я думаю – vatob