開始使用免費開始

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'])

____
編輯並執行程式碼