【问题标题】:thresholds in roc_curve in scikit learnscikit learn中roc_curve中的阈值
【发布时间】:2017-01-02 12:18:18
【问题描述】:

我指的是下面的链接和示例,并在我感到困惑的地方发布了此页面的绘图图。我的困惑是,只有 4 个阈值,但似乎 roc 曲线有很多数据点(> 4 个数据点),想知道 roc_curve 如何在底层工作以找到更多数据点?

http://scikit-learn.org/stable/modules/model_evaluation.html#roc-metrics

>>> import numpy as np
>>> from sklearn.metrics import roc_curve
>>> y = np.array([1, 1, 2, 2])
>>> scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> fpr, tpr, thresholds = roc_curve(y, scores, pos_label=2)
>>> fpr
array([ 0. ,  0.5,  0.5,  1. ])
>>> tpr
array([ 0.5,  0.5,  1. ,  1. ])
>>> thresholds
array([ 0.8 ,  0.4 ,  0.35,  0.1 ])

【问题讨论】:

    标签: python python-2.7 machine-learning scikit-learn roc


    【解决方案1】:

    正如 HaohanWang 提到的,函数 roc_curve 中的参数 'drop_intermediate' 可以降低一些次优阈值,以创建更轻的 ROC 曲线。 (roc_curve)。

    如果将该参数设置为False,则会显示所有阈值,例如:

    所有的阈值和对应的TPRs和FPRs都被计算出来了,但是其中一些对于绘制ROC曲线是没有用的。

    【讨论】:

    • 什么是次优阈值?
    • @CMCDragonkai 次优阈值对应于 ROC 曲线上与相邻点共线的点。例如,查看 TPR=1 时的所有阈值。它们不会向 ROC 曲线添加任何内容,因此在它们之间进行插值更简单。更多详情见源代码:github.com/scikit-learn/scikit-learn/blob/…
    【解决方案2】:

    【讨论】:

    • 我明白了,谢谢 maxymoo。我有一个普遍的问题,当我们在scikit learn中使用roc_curve时,我认为为了绘制ROC曲线,我们需要选择模型阈值,这反映到相关的FPR和FNR。想知道 sikie 如何学习 roc_curve 选择阈值?
    • 顺便说一句,maxymoo,在你的例子中,我认为为了绘制roc_curve,scikit learn 还需要很多模型阈值的 TPR 和 FNR 模型性能,对吗?但是在您的示例中,我不需要他们训练具有不同阈值的模型。如果你能再澄清一点,那就太好了。 :)
    • 我认为阈值只是score的不同值
    • 感谢 maxymoo,如果您能详细说明一下,那就太好了。我对fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])这行代码感到困惑,y_test[:, i]是分类的真实结果,y_score[:, i]是预测结果=>在您提到的示例中(scikit-learn.org/stable/auto_examples/model_selection/…)。对于score,我认为您的意思是预测结果?哪个是y_score[:, i],我只是好奇y_score[:, i] 的离散值(我认为是类标签预测结果,如0 and 1)有多离散
    • 参见drop_intermediate 方法的roc_curve 参数。 (scikit-learn.org/stable/modules/generated/…)。基本上,有时,sklearn 决定放弃一些无用的阈值,导致阈值小于不同的值。 @林马
    猜你喜欢
    • 2014-06-05
    • 2021-06-20
    • 2013-11-27
    • 2016-10-22
    • 2020-07-16
    • 2015-04-27
    • 2019-04-19
    • 2020-06-23
    相关资源
    最近更新 更多