Предположим, у меня есть (для простоты) детектор объектов 3 класса, и я хотел бы построить среднюю ROC-кривую.Я могу успешно построить ROC для каждого класса, как показано ниже.
Значения верны и кривые тоже.Проблема в том, что у меня (как вы можете видеть на графике) различное количество образцов для каждого класса.
Например (случайные данные):
Class 31
FPR :['0.00', '0.20', '0.30']
TPR :['0.00', '0.20', '0.30']
Class 39
FPR :['0.00', '0.20', '0.30', '0.40', '0.50']
TPR :['0.00', '0.20', '0.30', '0.40', '0.50']
Class 42
FPR :['0.00', '0.20', '0.30', '0.40', '0.50', '0.60', '0.70', '0.80']
TPR :['0.00', '0.20', '0.30', '0.40', '0.50', '0.60', '0.70', '0.80']
IЯ использую этот сценарий для оценки (отзыв / чувствительность уже рассчитаны, как вы можете видеть в строке 647 ), и я немного изменил его, чтобы вычислить также FPR (1-специфичность)следующим образом:
fpr = tp[:]
for idx, val in enumerate(tp):
fpr[idx] = float(fp[idx]) / (fp[idx] + (gt_counter_per_class[class_name] - tp[idx]))
и нанесение ROC (напомним, против 1-специфичности) следующим образом:
plt.plot(fpr, rec, label='ROC curve of the class {0} (AUC = {1:0.2f})'
''.format(class_name, auc(fpr, rec)))
Я уже потратил часы на это, но не могу понять, какрассчитать среднее значение ROC по нескольким кривым ROC (для каждого класса), если для каждого класса имеется различное количество образцов.Спасибо за любую помощь.