始める無料で始める

しきい値を最適化する

理論上はデフォルトの 0.5 が accuracy を最大化すると聞きましたが、実際にどうなるか確かめたいとします。そこで複数のしきい値を試し、得られる accuracy を比較して、最も良いしきい値を見つけます。さらに F1 スコアでも同様に実験します。0.5 は本当に最適なしきい値でしょうか? accuracy と F1 スコアで最適なしきい値は同じでしょうか?実際に確かめてみましょう。テストデータをスコアリングして得たscores行列が用意されています。テストデータの正解ラベルはy_testとして利用できます。最後に、配列の最小値・最大値のインデックスを返す 2 つのnumpy関数argmin()argmax()、さらに評価指標のaccuracy_score()f1_score()が読み込まれています。

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

Python で設計する Machine Learning ワークフロー

コースを見る

演習の手順

  • 0.0、0.25、0.5、0.75、1.0 を含むしきい値の範囲を作成します。
  • 二重リスト内包表記を使って、上記の各しきい値に対する予測を保存します。しきい値thrでスコア行列からラベルを得るには、[s[1] > thr for s in scores]が使えることを思い出してください。
  • そのリストを走査して、各しきい値の accuracy を計算します。F1 スコアについても同様に計算します。
  • argmin()またはargmax()を使って、accuracy と F1 それぞれの最適なしきい値を見つけてください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Create a range of equally spaced threshold values
t_range = ____

# Store the predicted labels for each value of the threshold
preds = [[____ > thr for s in scores] for ____ in ____]

# Compute the accuracy for each threshold
accuracies = [____(____, ____) for p in preds]

# Compute the F1 score for each threshold
f1_scores = [____(____, ____) for p in preds]

# Report the optimal threshold for accuracy, and for F1
print(t_range[____(accuracies)], t_range[____(f1_scores)])
コードを編集して実行