Keras提供的指標使得我們能夠評估深度學習模型的性能。由於Keras提供了大量指標,因此為生產模型選擇理想指標是一項複雜的工作。在某些情況下,您可能必須自定義指標(因為Keras根本無法提供所需的指標),這會影響模型的最終性能。
在本教程中,我們不會深入探討每一個指標或何時使用它,我們將使用Keras構建幾個簡單的自定義指標,以進行二元分類。
請始終參考下面的混淆矩陣以了解其餘內容。
首先,我們從導入必要的Python庫開始。
import keras.backend as K
精度(Precision)
我們需要記住,y_true和y_pred的操作不是NumPy數組,而是Theano或Tensorflow張量。這就是為什麼我們將Keras後端提供的操作用於指標的原因。
召回率(Recall)或靈敏度(Sensitivity)
特異度(Specificity)
F beta分數
在F-beta分數中選擇beta時,您越想關注召回率而不是精度,應該選擇更高的beta。例如,對於F1分數,我們同樣關心recall和precision,對於F2分數,recall對我們來說是兩倍重要。
在0 <beta <1的情況下,我們更關注精度,因此閾值越高,F beta得分越高。當beta> 1時,我們的最佳閾值朝著更低的閾值移動,當beta = 1時,它處於中間位置。
特異度(Specificity)/靈敏度(Sensitivity)
它是特異度和靈敏度的平均值,我們將其稱為average_metric。請注意,靈敏度與前面定義的recall是同一個函數。
另外,為了確保我的模型不會在某個類上過度擬合,我傾向於在average_metric中添加一個條件操作,我們將調用新指標conditional_average_metric。這背後的直覺是監測靈敏度和特異度的值,如果它們中的任何一個下降到某個水平以下,那麼我們將大幅降低所述度量的最終值。
之所以這樣做,是因為在訓練模型時,Keras並沒有在每個epoch之後保存每個模型,而是為我們提供了監視度量的選項,並根據監視的數量保存最新的最佳模型。
使用首選指標定義機器學習模型
首先,建立模型並選擇您想要監視的首選指標。我們將在這個例子中繼續有三個指標,即conditional_average_metric、specificity、sensitivity。
訓練機器學習模型並保存最佳模型
儘管我們在訓練過程中使用了三個指標,但我們應該僅選擇其中一個指標,即
conditional_average_metric,來保存基於它的模型。訓練模型時,基於監視指標的最佳性能模型將自動保存到指定路徑。
加載預訓練機器學習模型
完成訓練過程後,我們可以按如下所示再次加載機器學習模型。
model = load_model(model_path, custom_objects={'conditional_average_metric': conditional_average_metric, 'specificity': specificity, 'sensitivity': sensitivity})