При работе с задачами многоклассовой классификации одним из распространенных показателей оценки является площадь под кривой (AUC). Однако вычисление AUC для мультиклассовых форматов может оказаться сложной задачей, поскольку оно не поддерживается напрямую некоторыми библиотеками и алгоритмами. В этой статье мы рассмотрим различные методы расчета многоклассовой AUC, а также приведем примеры кода, которые помогут вам эффективно решить эту проблему.
- Подход «один против остальных» (OVR):
Подход OVR преобразует задачу мультикласса в несколько задач двоичной классификации. Он обучает отдельный классификатор для каждого класса, рассматривая его как положительный класс, а остальные — как отрицательный. Затем AUC рассчитывается для каждого классификатора индивидуально. Вот пример использования scikit-learn:
from sklearn.multiclass import OneVsRestClassifier
from sklearn.metrics import roc_auc_score
# Assuming X_train, y_train, X_test, y_test are your training and test datasets
model = OneVsRestClassifier(YourClassifier())
model.fit(X_train, y_train)
y_pred = model.predict_proba(X_test)
auc_score = roc_auc_score(y_test, y_pred, average='macro')
- Подход «один против одного» (OVO).
Подход OVO создает двоичный классификатор для каждой пары классов. Он обучает модели для всех возможных пар, а затем объединяет прогнозы для определения окончательного класса. AUC рассчитывается путем агрегирования результатов всех парных классификаторов. Вот пример использования scikit-learn:
from sklearn.multiclass import OneVsOneClassifier
from sklearn.metrics import roc_auc_score
# Assuming X_train, y_train, X_test, y_test are your training and test datasets
model = OneVsOneClassifier(YourClassifier())
model.fit(X_train, y_train)
y_pred = model.decision_function(X_test)
auc_score = roc_auc_score(y_test, y_pred, average='macro')
- Макросредний подход.
При макросреднем подходе рассчитывается AUC для каждого класса, а затем берется среднее значение для всех классов. Он относится к каждому классу одинаково, независимо от классового дисбаланса. Вот пример использования scikit-learn:
from sklearn.metrics import roc_auc_score
# Assuming y_true and y_pred are your true labels and predicted probabilities
auc_score = roc_auc_score(y_true, y_pred, average='macro')
- Микросредний подход.
Микросредний подход объединяет истинные положительные, ложноположительные и ложноотрицательные результаты по всем классам, а затем рассчитывает AUC. Он учитывает общую производительность классификатора. Вот пример использования scikit-learn:
from sklearn.metrics import roc_auc_score
# Assuming y_true and y_pred are your true labels and predicted probabilities
auc_score = roc_auc_score(y_true, y_pred, average='micro')
- Взвешенный подход.
Взвешенный подход рассчитывает AUC для каждого класса, а затем берет средневзвешенное значение на основе частоты классов. Он объясняет классовый дисбаланс, придавая больший вес классам меньшинств. Вот пример использования scikit-learn:
from sklearn.metrics import roc_auc_score
# Assuming y_true and y_pred are your true labels and predicted probabilities
auc_score = roc_auc_score(y_true, y_pred, average='weighted')
В этой статье мы рассмотрели несколько методов расчета мультиклассовой AUC. Подходы «один против остальных» (OVR) и «один против одного» (OVO) полезны при использовании двоичных классификаторов, в то время как подходы «макросредний», «микросредний» и взвешенный предоставляют альтернативы для расчета AUC по нескольким классам. Используя эти методы и прилагаемые примеры кода, вы можете эффективно оценить и сравнить производительность ваших моделей многоклассовой классификации.