В задачах классификации машинного обучения важно оценить производительность моделей. Одним из популярных показателей оценки, используемых для двоичной классификации, является кривая рабочей характеристики приемника (ROC) и соответствующая площадь под кривой (AUC). Однако что, если у нас будет несколько классов вместо двух? В этой статье мы углубимся в концепцию мультиклассовой кривой ROC AUC, рассмотрим различные методы ее вычисления и предоставим примеры кода с использованием Python и scikit-learn.
Понимание мультиклассовой кривой ROC AUC:
Мультиклассовая кривая ROC AUC расширяет бинарную кривую ROC для обработки сценариев с более чем двумя классами. Он обеспечивает визуальное представление компромисса между истинно положительным показателем (чувствительностью) и ложноположительным уровнем (1 – специфичность) для каждого класса. Площадь под мультиклассовой кривой ROC AUC измеряет общую производительность классификатора по всем классам.
Методы вычисления мультиклассовой ROC AUC:
- Подход «один против остальных» (OvR):
Подход OvR рассматривает каждый класс как отдельную задачу бинарной классификации. Для каждого класса рассчитывается отдельная кривая ROC, считая класс положительным, а остальные — отрицательными. Итоговый мультиклассовый ROC AUC рассчитывается путем усреднения значений AUC отдельного класса.
Пример кода с использованием scikit-learn:
from sklearn.metrics import roc_auc_score
from sklearn.preprocessing import LabelBinarizer
# Assuming y_true contains the true labels and y_pred contains the predicted probabilities
lb = LabelBinarizer()
lb.fit(y_true)
y_true_bin = lb.transform(y_true)
y_pred_bin = lb.transform(y_pred)
multiclass_roc_auc = roc_auc_score(y_true_bin, y_pred_bin, average='macro')
- Взвешенная AUC:
В ситуациях, когда существует классовый дисбаланс, можно использовать подход взвешенной AUC. Он присваивает более высокие веса классам с меньшим количеством выборок, что дает им большее влияние на общий расчет производительности.
Пример кода с использованием scikit-learn:
from sklearn.metrics import roc_auc_score
# Assuming y_true contains the true labels and y_pred contains the predicted probabilities
multiclass_roc_auc = roc_auc_score(y_true, y_pred, average='weighted')
- Микро- и макроусреднение.
При микроусреднении рассчитывается общая кривая ROC и AUC путем совместного рассмотрения всех образцов и их прогнозов. С другой стороны, макроусреднение вычисляет кривую ROC и AUC для каждого класса независимо, а затем усредняет результаты.
Пример кода с использованием scikit-learn:
from sklearn.metrics import roc_auc_score
# Assuming y_true contains the true labels and y_pred contains the predicted probabilities
micro_roc_auc = roc_auc_score(y_true, y_pred, average='micro')
macro_roc_auc = roc_auc_score(y_true, y_pred, average='macro')
В этой статье мы рассмотрели различные методы расчета мультиклассовой кривой ROC AUC. Мы рассмотрели подход «один против остальных», взвешенную AUC, а также методы микро- и макроусреднения. Используя эти методы с примерами кода на Python и scikit-learn, вы можете эффективно оценить производительность моделей многоклассовой классификации. Понимание и использование многоклассовой кривой ROC AUC имеет решающее значение для принятия обоснованных решений в задачах машинного обучения.