等错误率值的正确计算

Correct compute of equal error rate value

我的工作是将用户的合法数据与进口商的数据进行分类。我使用二进制 SVM 分类器输出两个 类 的概率。然后使用Roc曲线从sklearn到return不同阈值的TPR和FPR向量如下:

classifier = SVC(kernel='rbf',  probability=True,  random_state=0, gamma=0.0001, C=0.5)
classifier.fit(X_train, y_train)

y_probas = classifier.predict_proba(X_test)
fpr, tpr, thresholds = metrics.roc_curve(y_true, y_probas, pos_label=0)
fnr = 1- tpr 

输出的fpr和tpr向量如下:

然而,为了计算 EER 值,我用谷歌搜索了很多,发现人们谈论不同的建议。我知道EER分数应该是FNR和FPR相等时的值(或者至少它们之间的距离最小,如下图红圈所示)。

这是否意味着 EER = fnr[%] = 8.33 和 fpr[%] = 10.6 之间的差异?我是说 EER = (10.6- 8.33) = 2.27%?

还是两个值中的最小值?我的意思是 EER = 8.33%

还是两个值的平均值?能效比 = (10.6 + 8.33)/2 = 9.465

我对根据最佳 FNR 和 FPR 值计算 EER 的正确方法感到困惑。

Equal Error Rate (EER) 是指通过在ROC曲线上选择一个最佳阈值来尽可能地增加TPR和减少FPR。 这也可以看作是最大化 TPR 和最小化 FPR 或简单地 maximizing (TPR - FPR)。通过最大化,我的意思是使值接近 1。 上面的公式也可以写成 minimizing (1 - (TPR - FPR));这里,最小化就是让值接近于0。 由于 FNR = 1 - TPR,上述函数采用以下形式, minimizing (FNR + FPR),即FNR和FPR都必须接近于0。

另一种方法说,ROC曲线左上角的点对应于最佳阈值。这可以通过想象从 ROC 曲线的左上角到右下角的一条线来计算。最靠近这条对角线的点对应于最佳阈值。 这条对角线的方程是:

TPR + FPR - 1 = 0 (or close to zero)
Now, FNR = 1 - TPR, so,
FPR - FNR = 0 (close to zero).

上述两种方法产生相似的结果并减少误报和漏报的数量。

参考文献:Picture link, another thread on EER (Whosebug)