昨天開始進入模型的編譯和訓練,可以觀察到,在模型訓練過程會顯示每一個週期的訓練資料集與驗證資料集的準確度(Accuracy)和損失值(Loss)。今天就來介紹深度學習中幾個常用的評估指標(Metrics)。
在分類的問題中,我們通常會選擇準確度作為評估指標。準確度為正確分類的樣本數佔總樣本數的比例,其公式如下:
或者為
其中 TP = True Positive,為正確預測為正例的樣本數,TN = True Negative,為正確預測為負例的樣本數,FP = False Positive,為錯誤預測為正例的樣本數,FN = False Negative,為錯誤預測為負例的樣本數。
準確度適合使用於類別平均的資料集,如果資料集類別不平均,會造成結果被誤導,這時候可以考慮其他評估指標,如精確度(Precision)、召回率(Recall)或 F1-score 等。
損失值(Loss)為機器學習或深度學習模型訓練過程中一個很重要的評估指標,為實際值與預測值之間的差距,根據所選擇的損失函數計算得出。在類別分類問題中,通常會選擇交叉熵(Cross-entropy)作為損失函數,在迴歸問題通常會使用均方誤差。
💡在分類問題選擇交叉熵類型的小技巧:
交叉熵類別 | 輸入資料集類型 |
---|---|
binary_crossentropy | 二分類 |
categorical_crossentropy | 分類標籤為 One-hot Encoding |
sparse_categorical_crossentropy | 整數標籤 |
💡同場加映:
在之前有提到其中一項匯入訓練資料集的方法 flow_from_directory()
,其中有一項參數為 class_mode
預設為 categorical(沒有特別寫的話預設為此設定),即為 One-hot Encoding,所以損失函數要使用 categorical_crossentropy
(二分類可使用 binary_crossentropy
)。
在前述有提到,單看準確度可能會導致結果被誤導,所以還有其他指標可以作為評估模型的參考。精密度(Precision)和準確度不同在於它留意於預測為正向的正確數量,為預測正向的狀況中,正確預測的機率值,其公式如下:
例如在醫學診斷的問題中,可以使用精密度作為疾病預測指標。
召回率(Recall)為實際正向的情況中,實際為真的機率值,留意於實際為正向的正確數量,其公式如下:
如果要解決的問題為在乎被遺漏掉的實際正例,例如癌症的檢查,原本有得癌症卻被預測為沒有癌症,這種正向例子被誤判時的成本較高。
將 Precision 和 Recall 加入評估模型的指標方法:
model.compile(optimizer=opt,
loss='categorical_crossentropy',
metrics=['accuracy',
tf.keras.metrics.Precision(name='precision'),
tf.keras.metrics.Recall(name='recall')
]
)
執行結果會發現多了兩種評估指標:
7/7 [==============================] - 38s 5s/step - loss: 46.1240 - accuracy: 0.3148 - precision: 0.3131 - recall: 0.3102 - val_loss: 15.2632 - val_accuracy: 0.5938 - val_precision: 0.5938 - val_recall: 0.5938
還有許多評估指標都可以依照專案需求去指定,如果內建沒有,也可以自己定義。明天要進入深度學習中一個很重要的觀念,先深呼吸休息一下吧~