scikit Learn のしきい値は、バイナリ分類の場合は 0.5 で、マルチクラス分類の確率が最も高いクラスはどれでもあります。多くの問題では、しきい値を調整することで、より良い結果が得られる場合があります。ただし、これは慎重に行う必要があり、ホールドアウト テスト データではなく、トレーニング データの相互検証によって行う必要があります。テスト データのしきい値を調整すると、テスト データが過学習になります。
しきい値を調整するほとんどの方法は、受信者動作特性 (ROC)とYouden の J 統計に基づいていますが、遺伝的アルゴリズムを使用した検索など、他の方法で行うこともできます。
これは、医学でこれを行うことを説明する査読ジャーナルの記事です。
http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2515362/
私が知る限り、Python でそれを行うためのパッケージはありませんが、Python でブルート フォース検索を使用して見つけるのは比較的簡単です (ただし非効率的です)。
これは、それを行うRコードです。
## load data
DD73OP <- read.table("/my_probabilites.txt", header=T, quote="\"")
library("pROC")
# No smoothing
roc_OP <- roc(DD73OP$tc, DD73OP$prob)
auc_OP <- auc(roc_OP)
auc_OP
Area under the curve: 0.8909
plot(roc_OP)
# Best threshold
# Method: Youden
#Youden's J statistic (Youden, 1950) is employed. The optimal cut-off is the threshold that maximizes the distance to the identity (diagonal) line. Can be shortened to "y".
#The optimality criterion is:
#max(sensitivities + specificities)
coords(roc_OP, "best", ret=c("threshold", "specificity", "sensitivity"), best.method="youden")
#threshold specificity sensitivity
#0.7276835 0.9092466 0.7559022