評估模型效能

使用 Keras 建立語言模型的循環神經網路(RNN)

David Cecchini

Data Scientist

準確率資訊不足

20 類別的任務,準確率 80%。模型夠好嗎?

  • 能正確分類所有類別嗎?
  • 各類別的準確率一樣嗎?
  • 是否對多數類別過度擬合?

我也不知道!

使用 Keras 建立語言模型的循環神經網路(RNN)

混淆矩陣

檢查各類別的真實與預測

呈現混淆矩陣,顯示真實與預測標籤的差異

使用 Keras 建立語言模型的循環神經網路(RNN)

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

使用 Keras 建立語言模型的循環神經網路(RNN)

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

使用 Keras 建立語言模型的循環神經網路(RNN)

F1 分數(F1-Score)

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

使用 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)

一起來練習吧!

使用 Keras 建立語言模型的循環神經網路(RNN)

Preparing Video For Download...