Построить точку EER на кривой DET, используя пакет bob python

Образец кода:

>>> from matplotlib import pyplot
>>> import bob.measure
>>> positives = np.random.normal(1,1,100)
>>> negatives = np.random.normal(-1,1,100)
>>> # we assume you have your negatives and positives already split
>>> npoints = 100
>>> bob.measure.plot.det(negatives, positives, npoints, color=(0,0,0), linestyle='-', label='test') 
>>> bob.measure.plot.det_axis([0.01, 40, 0.01, 40]) 
>>> pyplot.xlabel('FAR (%)') 
>>> pyplot.ylabel('FRR (%)') 
>>> pyplot.grid(True)
>>> pyplot.show() 

Этот код возвращает следующее изображение:

Следующие функции рассчитывают EER:

eer1 = bob.measure.eer_rocch(negatives, positives)

Я хотел бы включить эту точку пересечения в кривую. Я пытался с:

>>> from matplotlib import pyplot
>>> import bob.measure
>>> positives = np.random.normal(1,1,100)
>>> negatives = np.random.normal(-1,1,100)
>>> # we assume you have your negatives and positives already split
>>> npoints = 100
>>> bob.measure.plot.det(negatives, positives, npoints, color=(0,0,0), linestyle='-', label='test') 
>>> bob.measure.plot.det_axis([0.01, 40, 0.01, 40]) 
>>> pyplot.plot(eer1,eer1) 
>>> pyplot.xlabel('FAR (%)') 
>>> pyplot.ylabel('FRR (%)') 
>>> pyplot.grid(True)
>>> pyplot.show() 

Без успеха. Я хотел бы получить фигуру, как в следующем примере:

1 ответ

Это было исправлено в https://gitlab.idiap.ch/bob/bob.measure/-/merge_requests/95 и включено в новые версии bob.measure. Чтобы точка попадала на график, значительно увеличьте количество точек.

      from matplotlib import pyplot
import bob.measure
import numpy as np
npoints = 1000 # use a large number here
positives = np.random.normal(1,1,100)
negatives = np.random.normal(-1,1,100)
bob.measure.plot.det(negatives, positives, npoints, color=(0,0,0), linestyle='-', label='test') 
bob.measure.plot.det_axis([0.01, 40, 0.01, 40])
eer1 = bob.measure.eer(negatives, positives)
# DET plots are in log scale, use ppndf to convert the point
eer2 = bob.measure.ppndf(eer1)
pyplot.plot(eer2, eer2, "o", label=f"EER={eer1*100}%")
pyplot.xlabel('FAR (%)') 
pyplot.ylabel('FRR (%)') 
pyplot.grid(True)
pyplot.legend()
pyplot.show()

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