Правильное вычисление равного значения частоты ошибок

Моя работа заключается в том, чтобы отделить законные данные пользователей от данных импортеров. Я использовал бинарный классификатор SVM для вывода вероятностей двух классов. Затем использовал кривую Roc из sklearn для возврата векторов 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

Я не понимаю, как правильно вычислить EER из лучших значений FNR и FPR.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 234
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Равная частота ошибок (EER) означает увеличение TPR и максимальное снижение FPR за счет выбора оптимального порога на кривой ROC. Это также можно рассматривать как максимизацию 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).

Оба описанных выше подхода дают схожие результаты и уменьшают количество ложноположительных и ложноотрицательных результатов.

Ссылки: Ссылка на изображение , другая ветка на EER (stackoverflow)

Другие вопросы по теме