如果我错了,请纠正我:"阈值"由scikit-learn返回的roc_curve应该是[0,1]中的数字数组。但是,它有时会给我一个数组,第一个数字接近" 2"。这是一个错误还是我做错了?感谢。
In [1]: import numpy as np
In [2]: from sklearn.metrics import roc_curve
In [3]: np.random.seed(11)
In [4]: aa = np.random.choice([True, False],100)
In [5]: bb = np.random.uniform(0,1,100)
In [6]: fpr,tpr,thresholds = roc_curve(aa,bb)
In [7]: thresholds
Out[7]:
array([ 1.97396826, 0.97396826, 0.9711752 , 0.95996265, 0.95744405,
0.94983331, 0.93290463, 0.93241372, 0.93214862, 0.93076592,
0.92960511, 0.92245024, 0.91179548, 0.91112166, 0.87529458,
0.84493853, 0.84068543, 0.83303741, 0.82565223, 0.81096657,
0.80656679, 0.79387241, 0.77054807, 0.76763223, 0.7644911 ,
0.75964947, 0.73995152, 0.73825262, 0.73466772, 0.73421299,
0.73282534, 0.72391126, 0.71296292, 0.70930102, 0.70116428,
0.69606617, 0.65869235, 0.65670881, 0.65261474, 0.6487222 ,
0.64805644, 0.64221486, 0.62699782, 0.62522484, 0.62283401,
0.61601839, 0.611632 , 0.59548669, 0.57555854, 0.56828967,
0.55652111, 0.55063947, 0.53885029, 0.53369398, 0.52157349,
0.51900774, 0.50547317, 0.49749635, 0.493913 , 0.46154029,
0.45275916, 0.44777116, 0.43822067, 0.43795921, 0.43624093,
0.42039077, 0.41866343, 0.41550367, 0.40032843, 0.36761763,
0.36642721, 0.36567017, 0.36148354, 0.35843793, 0.34371331,
0.33436415, 0.33408289, 0.33387442, 0.31887024, 0.31818719,
0.31367915, 0.30216469, 0.30097917, 0.29995201, 0.28604467,
0.26930354, 0.2383461 , 0.22803687, 0.21800338, 0.19301808,
0.16902881, 0.1688173 , 0.14491946, 0.13648451, 0.12704826,
0.09141459, 0.08569481, 0.07500199, 0.06288762, 0.02073298,
0.01934336])
答案 0 :(得分:6)
大部分时间都没有使用这些阈值,例如计算曲线下面积,或绘制误报率与真实阳性率。
然而,为了绘制看似合理的曲线,需要有一个包含0个数据点的阈值。由于Scikit-Learn的ROC曲线函数不需要对阈值进行归一化概率(任何得分都很好),因此将此点的阈值设置为1是不够的;将其设置为inf
是明智的,但编码人员通常期望有限的数据(并且它的实现也可能适用于整数阈值)。相反,该实现使用max(score) + epsilon
epsilon = 1
。这可能是美容上的缺陷,但你没有理由说明它是一个问题!
答案 1 :(得分:2)
来自文档:
阈值:数组,形状= [n_thresholds] 降低用于计算的决策函数的阈值 fpr和tpr。
thresholds[0]
表示没有预测的实例 并被任意设置为max(y_score) + 1
。
因此thresholds
的第一个元素接近2,因为它是max(y_score) + 1
,在您的情况下是thresholds[1] + 1
。
答案 2 :(得分:1)
这对我来说似乎是个错误 - 在roc_curve(aa,bb)中,1被添加到第一个阈值。您应该在此处https://github.com/scikit-learn/scikit-learn/issues
创建问题