В задачах многоклассовой классификации (когда у нас больше двух классов) использование метрик, таких как точность (accuracy), полнота (recall), точность (precision) и F1-Score, требует применения агрегационных методов, чтобы получить общую оценку производительности модели. Рассмотрим основные способы агрегации мультиклассовых метрик:
Макро-среднее вычисляется как среднее значение метрик, рассчитанных отдельно для каждого класса. Оно придает одинаковый вес каждому классу, независимо от его частоты. \[ \text{Macro-Precision} = \frac{1}{N} \sum_{i=1}^{N} \text{Precision}_i \] Где \( N \) – число классов.
Микро-среднее вычисляется путем суммирования всех истинных положительных, ложных положительных и ложных отрицательных результатов для всех классов, а затем вычисления метрики. Это придает больший вес классам с большим числом примеров. \[ \text{Micro-Precision} = \frac{\sum_{i=1}^{N} TP_i}{\sum_{i=1}^{N} (TP_i + FP_i)} \]
Взвешенное среднее учитывает частоту каждого класса. Метрика для каждого класса умножается на долю примеров этого класса, и затем все результаты суммируются. \[ \text{Weighted-Precision} = \sum_{i=1}^{N} w_i \cdot \text{Precision}_i \ Где \( w_i \) – доля примеров класса \( i \).
Рассмотрим, как использовать различные способы агрегации метрик для многоклассовой классификации на Python:
from sklearn.metrics import precision_score, recall_score, f1_score
# Пример истинных и предсказанных значений для многоклассовой задачи
y_true = [0, 1, 2, 2, 1, 0]
y_pred = [0, 2, 1, 2, 0, 1]
# Precision
macro_precision = precision_score(y_true, y_pred, average='macro')
micro_precision = precision_score(y_true, y_pred, average='micro')
weighted_precision = precision_score(y_true, y_pred, average='weighted')
print(f"Macro Precision: {macro_precision}")
print(f"Micro Precision: {micro_precision}")
print(f"Weighted Precision: {weighted_precision}")
# Recall
macro_recall = recall_score(y_true, y_pred, average='macro')
micro_recall = recall_score(y_true, y_pred, average='micro')
weighted_recall = recall_score(y_true, y_pred, average='weighted')
print(f"Macro Recall: {macro_recall}")
print(f"Micro Recall: {micro_recall}")
print(f"Weighted Recall: {weighted_recall}")
# F1-Score
macro_f1 = f1_score(y_true, y_pred, average='macro')
micro_f1 = f1_score(y_true, y_pred, average='micro')
weighted_f1 = f1_score(y_true, y_pred, average='weighted')
print(f"Macro F1-Score: {macro_f1}")
print(f"Micro F1-Score: {micro_f1}")
print(f"Weighted F1-Score: {weighted_f1}")
Ставь 👍 и забирай 📚 Базу знаний