sklearn.metrics.roc_curve返回阈值数组 which shape=[n_thresholds]。如何n_thresholds选择参数?
如何在 scikit-learn 的 roc_curve 函数中选择阈值的数量?
机器算法验证
scikit-学习
鹏
2022-03-10 10:22:22
3个回答
根据定义,ROC 曲线代表区间中所有可能的阈值。
这个数字是无限的,当然不能用计算机来表示。幸运的是,当您有一些数据时,您可以简化这一过程,并且只访问有限数量的阈值。
此数字对应于数据中唯一值的数量 + 1,或类似:
n_thresholds = len(np.unique(x)) + 1
x保存目标分数的数组在哪里( y_score)。
您可以检查 sklearn.metrics.roc_curve 的代码,了解它如何确定返回的阈值数量。我简单地看了看它,它说它试图降低次优的阈值(无论这意味着什么)并且这些阈值不会出现在 ROC 曲线上。所以阈值的数量并不总是等于分数的数量。
n_thresholds = len(np.unique(x)) + 1
阈值是一个连续的数值变量,但只有一些不是次优/有用的,这意味着只有那些阈值会影响混淆矩阵(因此影响真阳性率或/和假阳性率,从而影响 ROC 图)。
哪个阈值会影响混淆矩阵?数据的唯一值,如果将阈值从大于唯一值的数字移动到小于该唯一值的数字,则混淆矩阵必须改变。但是,如果您在任何两个唯一的相邻数据值之间移动阈值,则生成的混淆矩阵中的任何值都将保持不变,因此这些阈值是次优的。
但是为什么要加一个?
thresholds[0] 表示没有实例被预测并且任意设置为 max(y_score) + 1
因为它以the largest value in data+ 1 开头。
参考:
ROC和AUC,解释清楚!
其它你可能感兴趣的问题