Как рассчитать оценку ROC_AUC для 3 классов

У меня есть данные с 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. У меня ошибка по этому показателю. 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 (Истина)

# 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 (Истина)

из приведенного выше кода. Построены 3 кривые roc. За счет мультиклассов.

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


person Shahnila Rahim    schedule 20.05.2019    source источник
comment
Если вы хотите получить более быстрый ответ, вы можете задать свой вопрос в другом месте, более связанном с этой темой, например data science stackexchange.   -  person Pedram    schedule 21.05.2019


Ответы (2)


Основные характеристики мультикласса AUC:

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

ПРОСТОЙ метод расчета AUC для отдельных классов:

  1. Выбираем классификатор

from sklearn.linear_model import LogisticRegression

LRE = LogisticRegression(solver='lbfgs')

LRE.fit(X_train, y_train)
  1. Я составляю список мультиклассов

    d = y_test.unique()

    class_name = list(d.flatten())

    class_name

    введите описание изображения здесь

  2. Теперь рассчитайте AUC для каждого класса отдельно.

    for p in class_name:

         `fpr, tpr, thresholds = metrics.roc_curve(y_test,  
                         LRE.predict_proba(X_test)[:,1], pos_label = p) 
    
          auroc = round(metrics.auc(fpr, tpr),2)
          print('LRE',p,'--AUC--->',auroc)`
    

введите описание изображения здесь

person Wojciech Moszczyński    schedule 24.06.2020

Для мультикласса часто бывает полезно рассчитать 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).

person veritessa    schedule 25.05.2019