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