Precision-Recall 取捨
在做分類任務時,你常會看到「Precision-Recall 取捨」這個名詞。它是怎麼來的?
通常,我們會選擇機率較高的類別來為文件指派標籤。但如果最高機率只有 0.1 呢?你會把機率只有 10% 的文件歸到這個類別嗎?
答案要看手上的問題而定。我們可以設定一個最小門檻來接受分類結果,當你調整這個門檻時,precision 和 recall 的數值會往相反方向變動。
變數 y_true 和模型 model 已載入。此外,若機率低於門檻,文件會被指派到 DEFAULT_CLASS(這裡選為類別 2)。
本練習屬於課程
使用 Keras 建立語言模型的循環神經網路(RNN)
練習說明
- 使用
.predict()方法取得每個類別的機率,並存到變數pred_probabilities。 - 只有在最大機率大於或等於
0.5時才接受,並將結果存到變數y_pred_50。 - 使用
np.argmax()和np.max(),對門檻為0.8做同樣的事情。 - 列印包含所有評估指標的變數
trade_off。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Get probabilities for each class
pred_probabilities = model.____(X_test)
# Thresholds at 0.5 and 0.8
y_pred_50 = [np.argmax(x) if np.max(x) >= ____ else DEFAULT_CLASS for x in pred_probabilities]
y_pred_80 = [np.____(x) if np.____(x) >= 0.8 else DEFAULT_CLASS for x in pred_probabilities]
trade_off = pd.DataFrame({
'Precision_50': precision_score(y_true, y_pred_50, average=None),
'Precision_80': precision_score(y_true, y_pred_80, average=None),
'Recall_50': recall_score(y_true, y_pred_50, average=None),
'Recall_80': recall_score(y_true, y_pred_80, average=None)},
index=['Class 1', 'Class 2', 'Class 3'])
____