我运行了逻辑回归模型,并对logit值进行了预测。我用它来得到ROC曲线上的点:
from sklearn import metrics
fpr, tpr, thresholds = metrics.roc_curve(Y_test,p)
我知道metrics.roc_auc_score
给出了ROC曲线下的面积。谁能告诉我哪个命令会找到最佳截止点(阈值)?
答案 0 :(得分:12)
鉴于tpr,fpr,问题的阈值,最佳阈值的答案只是:
optimal_idx = np.argmax(tpr - fpr)
optimal_threshold = thresholds[optimal_idx]
答案 1 :(得分:7)
Vanilla Python实现Youden的J-Score
recv
答案 2 :(得分:3)
cgnorthcutt的帖子
给出问题的阈值tpr,fpr,最佳阈值的答案就是:
optimal_idx = np.argmax(tpr-fpr)optimum_threshold = 阈值[optimal_idx]
几乎是正确的。必须采用绝对值。
optimal_idx = np.argmin(np.abs(tpr - fpr)) // Edit: Change to argmin!
optimal_threshold = thresholds[optimal_idx]
根据提到的参考文件-> http://www.medicalbiostatistics.com/roccurve.pdf第6页,我发现了另一种可能性:
opt_idx = np.argmin(np.sqrt(np.square(1-tpr)+ np.square(fpr)))
答案 3 :(得分:1)
尽管我迟到了聚会,但是您也可以使用“几何平均”来确定最佳阈值,如下所示:threshold tuning for imbalance classification
可以计算为:
# calculate the g-mean for each threshold
gmeans = sqrt(tpr * (1-fpr))
# locate the index of the largest g-mean
ix = argmax(gmeans)
print('Best Threshold=%f, G-Mean=%.3f' % (thresholds[ix], gmeans[ix]))