2015-10-20 1 views
0

Каков правильный способ оценки бинарного классификатора с использованием оценочных показателей scikit-learn?category_report vs f1_score в показателях классификации scikit-learn

Учитывая, что y_test и y_pred как золотые и предсказанные ярлыки, не должна ли оценка F1 в выводе классификации_репортажей быть такой же, как и для f1_score?

Вот как я это делаю:

print(classification_reprot(y_test, y_pred) 

дает следующую таблицу:

  precision recall f1-score support 

     0  0.49  0.18  0.26  204 
     1  0.83  0.96  0.89  877 

avg/total  0.77  0.81  0.77  1081 

Однако

print(f1_score(y_test, y_pred) 

дает F1 балл = 0,89

Теперь, с учетом вышеупомянутых выходов, является производительность этой модели F1 оценка = 0,89 или это 0,77?

ответ

1

Короче говоря, для вашего случая, то f1-счет является 0,89, а средневзвешенного f1-счет составляет 0,77.

Посмотрите на строку документации по sklearn.metrics.f1_score:

The F1 score can be interpreted as a weighted average of the precision and 
recall, where an F1 score reaches its best value at 1 and worst score at 0. 
The relative contribution of precision and recall to the F1 score are 
equal. The formula for the F1 score is:: 

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

In the multi-class and multi-label case, this is the weighted average of 
the F1 score of each class. 

Ключ последнее предложение здесь. Если вы ищете средневзвешенную оценку f1 для каждого класса, то вы не должны кормить функцию двоичной классификацией 0/1. Так, например, вы могли бы сделать

f1_score(y_test + 1, y_pred + 1) 
# 0.77 

Если класс метки не 0/1, то это рассматривается как мультиклассируют метрики (где вы заботитесь о всех точности/оценки припоминания), а не двоичной метрики (где вы заботитесь о точности/отзыве только для положительных образцов). Я согласен, что это может быть немного удивительно, но в целом классы 0/1 рассматриваются как маркер бинарной классификации.


Edit: некоторые из поведения перечисленного здесь являются устаревшим, так как Scikit учиться 0.16 - в частности, запутанные неявные предположения о двоичных против небинарных классификаций. См. this github thread.

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