scikit learn中roc_curve中的阈值
Posted
技术标签:
【中文标题】scikit learn中roc_curve中的阈值【英文标题】:thresholds in roc_curve in scikit learn 【发布时间】: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 ])
【问题讨论】:
【参考方案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】:那个情节实际上来自这个例子:http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html
【讨论】:
我明白了,谢谢 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 决定放弃一些无用的阈值,导致阈值小于不同的值。 @林马以上是关于scikit learn中roc_curve中的阈值的主要内容,如果未能解决你的问题,请参考以下文章