Оценка производительности модели

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

David Cecchini

Data Scientist

Accuracy — недостаточно информативная метрика

Задача с 20 классами и точностью 80%. Хорошая ли это модель?

  • Верно ли она классифицирует все классы?
  • Одинакова ли точность для каждого класса?
  • Не переобучилась ли модель на преобладающем классе?

Пока неясно!

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Матрица ошибок

Сравнение истинных и предсказанных меток по каждому классу

Матрица ошибок, показывающая различия между истинными и предсказанными метками

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Precision

Точность (Precision)

$$\text{Precision}_{\text{class}} = \frac{\text{Correct}_{\text{class}}}{\text{Predicted}_{\text{class}}}$$

В примере:

$$ \text{Precision}_{\text{sci.space}} = \frac{76}{76+7+9} = 0.83 $$ $$ \text{Precision}_{\text{alt.atheism}} = \frac{1}{2+1+0} = 0.33 $$ $$ \text{Precision}_{\text{soc.religion.christian}} = \frac{3}{0+2+3} = 0.60 $$

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Recall

Полнота (Recall)

$$\text{Recall}_{\text{class}} = \frac{\text{Correct}_{class}}{N_\text{class}}$$

В примере:

$$ \text{Recall}_{\text{sci.space}} = \frac{76}{76+2+0} = 0.97 $$ $$ \text{Recall}_{\text{alt.atheism}} = \frac{1}{7+1+2} = 0.10 $$ $$ \text{Recall}_{\text{soc.religion.christian}} = \frac{3}{9+0+3} = 0.25 $$

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

F1-Score

F1-мера

$$\text{F1 score} = 2 * \frac{\text{precision}_{\text{class}} * \text{recall}_{\text{class}}}{\text{precision}_{\text{class}} + \text{recall}_{\text{class}}}$$

В примере:

$$ f1score_{sci.space} = 2 \frac{0.83 * 0.97}{0.83 + 0.97} = 0.89 $$ $$ f1score_{alt.atheism} = 2 \frac{033 * 0.10}{033 + 0.10} = 0.15 $$ $$ f1score_{soc.religion.christian} = 2 \frac{060 * 0.25}{060 + 0.25} = 0.35 $$

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Матрица ошибок в sklearn

from sklearn.metrics import confusion_matrix

# Build the confusion matrix confusion_matrix(y_true, y_pred)

Вывод:

array([[76,  2,  0],
       [ 7,  1,  2],
       [ 9,  0,  3]], dtype=int64)
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Метрики качества

Метрики из sklearn

# Functions of sklearn
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Метрики качества

# Accuracy
print(accuracy_score(y_true, y_pred))
$ 0.80

Добавьте average=None в функции precision, recall и f1 score

print(precision_score(y_true, y_pred, average=None))
print(recall_score(y_true, y_pred, average=None))
print(f1_score(y_true, y_pred, average=None))
$ array([0.83, 0.33, 0.60])
$ array([0.97, 0.10, 0.25])
$ array([0.89, 0.15, 0.35])
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Отчёт о классификации

Одна функция для всех метрик:

lab_names = ['sci.space', 'alt.atheism', 'soc.religion.christian']
print(classification_report(y_true, y_pred, target_names=lab_names))
                        precision    recall  f1-score   support

             sci.space       0.83      0.97      0.89        78
           alt.atheism       0.33      0.10      0.15        10
soc.religion.christian       0.60      0.25      0.35        12

             micro avg       0.80      0.80      0.80       100
             macro avg       0.59      0.44      0.47       100
          weighted avg       0.75      0.80      0.76       100
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Давайте потренируемся!

Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras

Preparing Video For Download...