Как рассчитать балл ROC_AUC по 3 классам - PullRequest
0 голосов
/ 20 мая 2019

У меня есть данные, имеющие 3 класса меток (0,1,2). Я пытался сделать ROC кривой. и сделал это с помощью параметра pos_label.

fpr, tpr, thresholds = metrics.roc_curve(Ytest, y_pred_prob, pos_label = 0)

Изменяя pos_label на 0,1,2, я получаю 3 графика. Теперь у меня проблема с подсчетом AUC. Как можно усреднить 3 графика и построить из него 1 график, а затем рассчитать оценку Roc_AUC у меня ошибка в этом metrics.roc_auc_score (Ytest, y_pred_prob)

ValueError: мультиклассовый формат не поддерживается

пожалуйста, помогите мне.

# store the predicted probabilities for class 0
y_pred_prob = cls.predict_proba(Xtest)[:, 0]
#first argument is true values, second argument is predicted probabilities
fpr, tpr, thresholds = metrics.roc_curve(Ytest, y_pred_prob, pos_label = 0)
plt.plot(fpr, tpr)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.title('ROC curve classifier')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
plt.grid(True)

# store the predicted probabilities for class 1
y_pred_prob = cls.predict_proba(Xtest)[:, 1]
#first argument is true values, second argument is predicted probabilities
fpr, tpr, thresholds = metrics.roc_curve(Ytest, y_pred_prob, pos_label = 0)
plt.plot(fpr, tpr)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.title('ROC curve classifier')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')

plt.grid (True)

# store the predicted probabilities for class 2
y_pred_prob = cls.predict_proba(Xtest)[:, 2]
#first argument is true values, second argument is predicted probabilities
fpr, tpr, thresholds = metrics.roc_curve(Ytest, y_pred_prob, pos_label = 0)
plt.plot(fpr, tpr)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.title('ROC curve classifier')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')

plt.grid (True)

из приведенного выше кода. 3 Roc кривых генерируются. Из-за нескольких классов.

Я хочу получить кривую с одним роком сверху 3, взяв среднее или среднее значение. Затем один счет roc_auc из этого.

1 Ответ

0 голосов
/ 26 мая 2019

Для мультикласса часто полезно вычислять AUROC для каждого класса.Например, вот выдержка из некоторого кода, который я использую для вычисления AUROC для каждого класса в отдельности, где label_meanings представляет собой список строк, описывающих, что представляет собой каждая метка, а различные массивы отформатированы таким образом, что каждая строка представляет собой отдельный пример, и каждый столбец соответствуетна другую метку:

for label_number in range(len(label_meanings)):
    which_label = label_meanings[label_number] #descriptive string for the label
    true_labels = true_labels_array[:,label_number]
    pred_probs = pred_probs_array[:,label_number]
   #AUROC and AP (sliding across multiple decision thresholds)
    fpr, tpr, thresholds = sklearn.metrics.roc_curve(y_true = true_labels,
                                     y_score = pred_probs,
                                     pos_label = 1)
    auc = sklearn.metrics.auc(fpr, tpr)

Если вы хотите построить среднюю кривую AUC для трех классов: этот код https://scikit -learn.org / stable / auto_examples/model_selection/plot_roc.html включает в себя части, которые рассчитывают среднее значение AUC, чтобы вы могли построить график (если у вас есть три класса, он построит среднее значение AUC для трех классов.)

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

Если вы хотите больше информации о AUROC и о том, как он рассчитывается для одного класса по сравнению с несколькими классами, вы можете увидеть эту статью, Измерение производительности: AUC (AUROC) .

...