Как построить кривую 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, рассчитанным выше.
Вот и все.