sklearn roc_curve 函数中定义了多少阈值?

How number of thresholds is defined in sklearn roc_curve function?

当我使用 sklearn 函数 roc_curve 对我的数据进行逻辑回归模型时:

roc_curve(y_test, predictions_test)

我得到了这个结果:

(array([0. , 0.1, 1. ]), array([0.   , 0.865, 1.   ]), array([2, 1, 0]))
In [137]:

我知道在第三个数组中有阈值,在第一个和第二个中有相应的TPR和FPR。但我不明白为什么有三个门槛。此函数中定义了多少阈值?例如,当我使用逻辑回归时,阈值必须是 sigmoid 函数的概率,但在这里它们是 2,1,0。为什么会这样?

正如您从 source code (within the call to _binary_clf_curve(), in turn called by roc_curve() here 中看到的那样,阈值的数量实际上是由不同 predictions_test 的数量定义的(原则上是分数)。但是,根据您的输出,我认为 predictions_test 可能是 .predict() 的输出(可能是多类分类问题? - 在这种情况下,您需要将 ROC 曲线定义扩展到处理多类设置)而不是 .predict_proba().decision_function()roc_curve 要求。

此外,请注意 roc_curve 也有一个参数 drop_intermediate(默认为 True),在某些情况下,它可能会降低次优阈值。

最终,我会推荐以下帖子:

  • 用于将 ROC 曲线扩展到多类设置;
  • or 以便更好地理解参数 drop_intermediate=True.
  • 的含义