谁能告诉我如何从python中的ROC曲线计算均等错误率(EER)?在scikit-learn中,有一种计算roc曲线和auc的方法,但找不到计算EER的方法。
from sklearn.metrics import roc_curve, auc
答案:
我想我实现了自己。
ROC EER的思想是直线连接之间的交点
(1,0)和(0,1)以及roc曲线。这是它相交的唯一点。对于a = 1和b = 1的直线,等式为
x+y =1 (x/a +y/b =1.0)
。因此,交点将为真正率(tpr)和假正率(fpr)的值,它表示以下等式: x + y - 1.0 = 0.0
从而将方法实现为:
def compute_roc_EER(fpr, tpr):
roc_EER = []
cords = zip(fpr, tpr)
for item in cords:
item_fpr, item_tpr = item
if item_tpr + item_fpr == 1.0:
roc_EER.append((item_fpr, item_tpr))
assert(len(roc_EER) == 1.0)
return np.array(roc_EER)
所以这里一个值是错误率,另一个值是准确性。
可能有人可以帮助我进行验证。
最佳答案
对于通过Google搜索到达此处的其他任何人。正如格哈德(Gerhard)指出的那样,弗兰(Fran)的答案是错误的。正确的代码是:
fpr, tpr, threshold = roc_curve(y, y_pred, pos_label=1)
fnr = 1 - tpr
eer_threshold = threshold(np.nanargmin(np.absolute((fnr - fpr))))
请注意,这可以获取没有发生EER的阈值,即EER。 EER定义为FPR = 1-PTR = FNR。因此,要获得EER(实际错误率),可以使用以下代码:
EER = fpr(np.nanargmin(np.absolute((fnr - fpr))))
作为健全性检查,该值应接近
EER = fnr(np.nanargmin(np.absolute((fnr - fpr))))
因为这是一个近似值