始める無料で始める

Precision-Recall のトレードオフ

分類タスクでは、しばしば「Precision-Recall のトレードオフ」という用語が登場します。これはどこから来るのでしょうか?

通常は、確率が最も高いクラスに文書を割り当てます。しかし、最大確率が 0.1 の場合はどうでしょうか。たった 10% の確率でそのクラスに属するとみなすべきでしょうか?

答えは、取り組んでいる問題によって異なります。分類を受け入れるための最小しきい値を設けることができ、しきい値を変えると precision と recall の値は互いに反対方向に動きます。

変数 y_true とモデル model は読み込まれています。また、確率がしきい値より低い場合は、その文書を DEFAULT_CLASS(クラス 2 に設定)に割り当てます。

この演習はコースの一部です

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

コースを見る

演習の手順

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

____
コードを編集して実行