Как построить кривую ROC для бинарных оценок с помощью scikit-learn?

Я построил кривую ROC, используя код, показанный ниже:

fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())

plt.plot(fpr["micro"], tpr["micro"],
         label='ROC curve Fold1 (area = %0.2f)' % roc_auc1["micro"])

Мне нужен график, который выглядит как кривая, но то, что я сейчас достигаю, как видно на рисунке ниже, состоит из двух прямых линий:

1 ответ

Решение

Кривые ROC - это способ сравнить набор оценок с непрерывным значением с набором меток с двоичным значением, применяя различный порог дискриминации к оценкам.

Если ваши оценки уже являются бинарными, тогда нет необходимости применять какой-либо порог - просто вычислите истинно положительный показатель и ложноположительный показатель, напрямую сравнивая ваши оценки с вашими ярлыками, например:

tpr = np.mean((y_score == 1) & (y_label == 1))
fpr = np.mean((y_score == 1) & (y_label == 0))

Если вы попытаетесь построить кривую ROC для набора двоичных показателей, вы получите линию, содержащую только три точки, потому что есть только три возможные пары значений TPR/FPR:

  • Если threshold > 1 затем вы классифицируете каждую выборку как отрицательную, и поэтому оба ваших FPR и TPR равны 0.
  • Если threshold <= 0 затем вы классифицируете каждый образец как положительный, и, следовательно, ваш TPR равен доле 1 с в вашем наборе меток, а ваш FPR равен доле 0 с в ваших метках.
  • Если 0 < threshold <= 1 тогда ваши значения TPR и FPR эквивалентны стандартным значениям TPR и FPR, рассчитанным выше.

Вот и все.

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