2016-12-22 2 views
2

Я пытаюсь понять, почему оценка F1 такова, что есть в sklearn. Я понимаю, что он рассчитывается как:Вычисление показателя F1 с использованием sklearn

F1 = 2 * (precision * recall)/(precision + recall) 

Мой код:

from sklearn.metrics import f1_score, precision_score, recall_score 
... 
fmeasure1 = f1_score(true_output, predicted_output, average="macro") 
fmeasure2 = f1_score(true_output, predicted_output, average="micro") 

precision = precision_score(true_output, predicted_output, average="macro") 
recall = recall_score(true_output, predicted_output, average="macro") 

print 2*(precision*recall)/(precision + recall), fmeasure1, fmeasure2 

Значения, которые я получаю мои данные являются:

0.785744255639 0.769527615775 0.984532095901 

Я не понимаю, почему эти три значения отличаются друг от друга. Я пробовал читать документацию here, но я все еще довольно потерян.

Мой набор данных является mutli-классом и, по своей природе, очень несбалансирован. Какое из значений здесь - это «правильное» значение, а также расширение, которое среди параметров для среднего (т. Е. None, micro, macro, weight) следует использовать?

Спасибо, и любое понимание будет очень ценным.

ответ

2

Посмотрите на возвращаемое значение:

Returns:  
f1_score : float or array of float, shape = [n_unique_labels] 
F1 score of the positive class in binary classification or weighted average of the F1 scores of each class for the multiclass task. 

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

Что касается лучшего результата.

best value at 1 and worst score at 0.[ \[From documentation\]][1] 

На стороне записки, если вы имеете дело с крайне несбалансированными наборами данных, вы должны рассмотреть вопрос о поиске в методы отбора проб, или просто подвыборки из существующих данных, если это позволяет.

Если вы хотите, в среднем предсказания average='weighted':

sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average='weighted') 
+0

Я не понимаю. Каждая оценка F1 предназначена для определенного класса? – meraxes

+0

В шестой строке документации: в случае с несколькими классами и с несколькими метками это средневзвешенное значение оценки F1 каждого класса. – SerialDev

+0

Хорошо, спасибо за ваш вклад. Однако мой вопрос остается, почему: почему эти значения отличаются от значения, возвращаемого: 2 * (точность * отзыв)/(точность + отзыв)? – meraxes

Смежные вопросы