Roc曲线和切断点。蟒蛇

时间:2015-02-25 12:28:56

标签: python logistic-regression roc

我运行了逻辑回归模型,并对logit值进行了预测。我用它来得到ROC曲线上的点:

 from sklearn import metrics
 fpr, tpr, thresholds = metrics.roc_curve(Y_test,p)

我知道metrics.roc_auc_score给出了ROC曲线下的面积。谁能告诉我哪个命令会找到最佳截止点(阈值)?

4 个答案:

答案 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]))