2015-05-28 7 views
0

У меня (истина), логические значения и предсказал логические значения, как:различие между каждыми значениями F1-оценкой в ​​sklearns.metrics.classification_report и sklearns.metrics.f1_score с бинарной матрицей неточностей

y_true = np.array([True, True, False, False, False, True, False, True, True, 
     False, True, False, False, False, False, False, True, False, 
     True, True, True, True, False, False, False, True, False, 
     True, False, False, False, False, True, True, False, False, 
     False, True, True, True, True, False, False, False, False, 
     True, False, False, False, False, False, False, False, False, 
     False, True, True, False, True, False, True, True, True, 
     False, False, True, False, True, False, False, True, False, 
     False, False, False, False, False, False, False, True, False, 
     True, True, True, True, False, False, True, False, True, 
     True, False, True, False, True, False, False, True, True, 
     False, False, True, True, False, False, False, False, False, 
     False, True, True, False]) 

y_pred = np.array([False, False, False, False, False, True, False, False, True, 
     False, True, False, False, False, False, False, False, False, 
     True, True, True, True, False, False, False, False, False, 
     False, False, False, False, False, True, False, False, False, 
     False, True, False, False, False, False, False, False, False, 
     True, False, False, False, False, False, False, False, False, 
     False, True, False, False, False, False, False, False, False, 
     False, False, True, False, False, False, False, True, False, 
     False, False, False, False, False, False, False, True, False, 
     False, True, False, False, False, False, True, False, True, 
     True, False, False, False, True, False, False, True, True, 
     False, False, True, True, False, False, False, False, False, 
     False, True, False, False]) 

Я с использованием следующих ИМПОРТНОЕ

from sklearn.metrics import f1_score, classification_report, confusion_matrix 

Путаница матрица выглядит следующим образом:

print(confusion_matrix(y_true, y_pred)) 

[[67 0] 
[21 24]] 

Я делаю:

print("f1_score: %f" % f1_score(y_true, y_pred)) 
print(classification_report(y_true, y_pred)) 

я получаю:

f1_score: 0.695652 
      precision recall f1-score support 

     False  0.76  1.00  0.86  67 
     True  1.00  0.53  0.70  45 

avg/total  0.86  0.81  0.80  112 

Я вижу 4 значения f1-score (0.695652, 0.86, 0.70, 0.80). Интересно, каковы различия между всеми значениями и как они рассчитываются.

ответ

1

Я думаю, что 0.695652 - это то же самое с 0.70. В scikit-learn f1_scoredocumentation объясняет, что в режиме по умолчанию: оценка F1 дает positive class в двоичной классификации.

Также вы можете легко получить оценку 0.86 с формулировкой оценки F1. Формулировка F1 ИВК является

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

EDIT:

Путаница матрица-то вроде этого:

    Prediction 
        FALSE | TRUE 
True Value FALSE 67  0 
      TRUE  21  24 

67 = True Negative, 0 = False Negative 
21 = False Positive, 24 = True Positive 

В поиске Avg/всего, формула использует эти значения, как вы сказал в комментарий.

+0

Хорошо спасибо. Я заметил, что 'f1_score (~ y_true, ~ y_pred) = 0.86451612903225816', но как получить 0.80? Кажется, что '(45 * f1_score (y_true, y_pred) + 67 * f1_score (~ y_true, ~ y_pred))/(67 + 45)' – scls

+0

Я думаю, что вы правы в своих предположениях. –