在过程曲线度量中,阈值大于1可以吗



预测Train_features:中每个选定样本的类别分配概率

probs = classifier.predict_proba(Train_features)`

选择必须确定AUC的类别。

preds = probs[:,1]

计算假阳性率、真阳性率以及可以明确区分TP和TN的可能阈值。

fpr, tpr, threshold = metrics.roc_curve(Train_labels, preds)
roc_auc = metrics.auc(fpr, tpr)
print(max(threshold))

输出:1.97834

前面的答案并没有真正解决您的问题,即为什么阈值是>1,当它说阈值没有任何解释时,事实上是误导性的。

从技术上讲,阈值的范围应该是[0,1],因为它是概率阈值。但是scikit learn在阈值数组中的最后一个数字上加+1,以覆盖整个范围[0,1]。因此,如果在您的示例中,最大值(阈值(=1.97834,那么阈值数组中的下一个数字应该是0.97834。

请参阅此sklearn github问题线程以获得解释。这有点有趣,因为有人认为这是一个bug,但这正是sklearn的创建者决定定义阈值的方式。

最后,因为它是一个概率阈值,所以它确实有一个非常有用的解释。最佳临界值是灵敏度+特异性最大的阈值。在sklearn学习中,这可以像一样计算

fpr_p, tpr_p, thresh = roc_curve(true_labels, pred)
# maximize sensitivity + specificity, i.e. tpr + (1-fpr) or just tpr-fpr
th_optimal = thresh[np.argmax(tpr_p - fpr_p)]

阈值没有任何解释,真正重要的是ROC曲线的形状。如果存在阈值(无论其值如何(,使得生成的ROC曲线位于线性函数之上(比随机猜测更好(,则分类器表现良好;如果对于任何阈值,ROC曲线仅为(0,1(处的一点,则分类器具有完美的结果(这在实践中很少发生(;如果对于任何阈值,ROC曲线仅为(1,0(处的一点,则分类器的结果最差。分类器性能的一个好指标是ROC曲线的积分,该指标被称为AUC,限制在0和1之间,0表示最差的性能,1表示完美的性能。

最新更新