16

Python で ROC 曲線から Equal Error Rate(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)

したがって、ここで 1 つの値はエラー率であり、別の値は精度です。

誰かが私を確認するのを手伝ってくれるかもしれません。

4

6 に答える 6

1

等しい誤り率 (EER) は、偽陽性率 (fpr) == 偽陰性率 (fnr) [小さいほど良い] です。

roc sklearn 計算から取得した fpr、tpr、およびしきい値を使用すると、この関数を使用して EER を取得できます。

def compute_eer(fpr,tpr,thresholds):
    """ Returns equal error rate (EER) and the corresponding threshold. """
    fnr = 1-tpr
    abs_diffs = np.abs(fpr - fnr)
    min_index = np.argmin(abs_diffs)
    eer = np.mean((fpr[min_index], fnr[min_index]))
    return eer, thresholds[min_index]
于 2019-08-15T16:55:35.107 に答える