【问题标题】:Scikit-learn roc_curve: why is thresholds [0] set to have values ​greater than 1?Scikit-learn roc_curve:为什么将阈值 [0] 设置为大于 1 的值?
【发布时间】:2021-06-20 04:03:27
【问题描述】:

我知道要绘制看似合理的 ROC 曲线,需要有一个包含 0 个数据点的阈值;但为什么不将此值设置为 1?
难道不应该理所当然地认为没有某些预测(即它们的概率等于 100%)吗?
查看默认设置,似乎有可能进行概率等于 1 的预测,我不明白为什么。

来自documentation

阈值:ndarray of shape = (n_thresholds,)

降低阈值 用于计算 fpr 和 tpr 的决策函数。阈值[0] 表示没有实例被预测并且任意设置为 最大值(y_score)+ 1。

【问题讨论】:

  • 包含 0 个数据点”到底是什么意思?
  • 如果预测不是概率怎么办?
  • @desertnaut 假设二进制元素分类 (1,0) 的情况,有必要知道(为了绘制正确的 ROC 曲线)哪个阈值将所有数据分类为 0。至少所以我明白了,你不同意吗?
  • @Calimo 如果不是他错的可能性,我想这就是我在下面的答案中被告知的(感谢提示)
  • 我同意,但是“包含 0 个数据点”对您的实际意思的描述极差

标签: scikit-learn roc


【解决方案1】:

可以使用任何置信度度量来生成 ROC 曲线,而不仅仅是预测概率。特别是在 sklearn 中,可以使用decision_function 方法来代替predict_proba。 (这很重要;例如,SVM 不会自然产生概率,但到超平面的有符号距离可以为 ROC 目的提供精细的排序。)

难道不应该理所当然地认为没有某些预测(即它们的概率等于 100%)吗?

这也不一定正确:具有纯叶的决策树的概率预测恰好为 1,即使是逻辑回归模型也可能预测由于数值精度限制而四舍五入为 1。

【讨论】:

  • 我明白了,非常感谢;我没有考虑过这种有用的概括。理论上,既然方法是一样的,我可以根据概率比较 SVM 的 ROC 曲线和二元分类器的 ROC 曲线吗?
  • @Massimo 如果答案解决了您的问题,请接受 - 请参阅What should I do when someone answers my question?
猜你喜欢
  • 2017-01-02
  • 2014-06-05
  • 1970-01-01
  • 2019-01-23
  • 2013-11-27
  • 2016-04-17
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
相关资源
最近更新 更多