评估模型性能

使用 Keras 构建语言建模的循环神经网络(RNN)

David Cecchini

Data Scientist

准确率信息不足

20 类任务,准确率 80%。该模型好吗?

  • 能正确分类所有类别吗?
  • 各类别的准确率是否一致?
  • 是否对多数类过拟合?

我不确定!

使用 Keras 构建语言建模的循环神经网络(RNN)

混淆矩阵

按类别检查真实与预测

展示混淆矩阵,显示真实标签与预测标签的差异

使用 Keras 构建语言建模的循环神经网络(RNN)

精确率

精确率(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 $$

使用 Keras 构建语言建模的循环神经网络(RNN)

召回率

召回率(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 $$

使用 Keras 构建语言建模的循环神经网络(RNN)

F1 分数

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 $$

使用 Keras 构建语言建模的循环神经网络(RNN)

Sklearn 混淆矩阵

from sklearn.metrics import confusion_matrix

# 构建混淆矩阵 confusion_matrix(y_true, y_pred)

输出:

array([[76,  2,  0],
       [ 7,  1,  2],
       [ 9,  0,  3]], dtype=int64)
使用 Keras 构建语言建模的循环神经网络(RNN)

性能指标

sklearn 指标

# 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
使用 Keras 构建语言建模的循环神经网络(RNN)

性能指标

# 准确率
print(accuracy_score(y_true, y_pred))
$ 0.80

在 precision、recall 和 f1 函数中添加 average=None

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])
使用 Keras 构建语言建模的循环神经网络(RNN)

分类报告

一条函数汇总所有:

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
使用 Keras 构建语言建模的循环神经网络(RNN)

Passons à la pratique !

使用 Keras 构建语言建模的循环神经网络(RNN)

Preparing Video For Download...