我正在使用scikit-learn进行分类问题以预测机会的获胜或失败 我使用了这段代码:
fpr, tpr, thresholds =roc_curve(yTest,predictions)
结果是:
(array([ 0. , 0.2628946, 1. ]),
array([ 0. , 0.73692477, 1. ]),
array([2, 1, 0]))
我知道使用fpr计算AUC,tpr用于在范围(1,0)内变化的各种阈值。理想情况下,我所知道的是thresold应该介于1和0之间。
但是,这里的阈值是2,1,0。从中了解什么以及如何解释这一点。
示例代码看起来很好:
import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.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 ])
我的predict_proba(yTest)是:
[ 0.09573287 0.90426713]
[ 0.14987409 0.85012591]
[ 0.16348188 0.83651812]
...,
[ 0.13957409 0.86042591]
[ 0.04478675 0.95521325]
[ 0.03492729 0.96507271]
答案 0 :(得分:0)
阈值不限于[0; 1]。
只有TPR和FPR是费率,即0到1。
如果您看到文档,它会告诉您它是如何达到值2的:
降低用于计算fpr和tpr的决策函数的阈值。
thresholds[0]
表示没有预测任何实例,并且被任意设置为max(y_score) + 1
。
如果您的输入数据的值为[100,42,42,3.14]
,则会考虑阈值[101, 100, 42, 3.14]
。
根据您的阈值为[2,1,0]
,您 以正确的方式使用此功能。你可能已经切换了两个参数?因为输出表明您的输入分数都是0或1.在这样的数据上,ROC曲线退化,您只需使用精度和召回。但是如果你已经改变了分数和标签,你可能会得到一个真正的ROC曲线。