Для оценки моделей классификации позволяют определить, насколько хорошо модель справляется с задачей предсказания классов.
Доля правильных предсказаний. Когда классы сбалансированы.
\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}
Доля правильно предсказанных положительных примеров. Когда важно минимизировать пропуск положительных случаев.
\text{Recall} = \frac{TP}{TP + FN}
Доля правильно предсказанных положительных примеров из всех предсказанных положительных. Когда важно минимизировать количество ложноположительных случаев.
\text{Precision} = \frac{TP}{TP + FP}
Гармоническое среднее между точностью и полнотой. Когда нужно сбалансировать точность и полноту.
F_1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}
Таблица с количеством истинных положительных, истинных отрицательных, ложноположительных и ложноотрицательных предсказаний.
ROC-кривая показывает соотношение истинно положительных и ложноположительных срабатываний при различных порогах. AUC – площадь под ROC-кривой. Для оценки качества моделей при различных порогах классификации.
Accuracy, Precision, Recall и F1-Score
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
# Истинные метки и предсказанные метки
y_true = [0, 1, 1, 1, 0, 1, 0, 0, 1, 1]
y_pred = [0, 1, 0, 1, 0, 1, 0, 1, 1, 0]
# Вычисление метрик
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
cm = confusion_matrix(y_true, y_pred)
print(f"Accuracy: {accuracy}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 Score: {f1}")
print(f"Confusion Matrix:\n{cm}")
ROC-кривая и AUC
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, roc_auc_score
# Истинные метки и предсказанные вероятности
y_true = [0, 1, 1, 1, 0, 1, 0, 0, 1, 1]
y_scores = [0.1, 0.4, 0.35, 0.8, 0.2, 0.75, 0.3, 0.4, 0.85, 0.6]
# Вычисление ROC-кривой и AUC
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
roc_auc = roc_auc_score(y_true, y_scores)
# Построение ROC-кривой
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC-кривая (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC-кривая')
plt.legend(loc="lower right")
plt.show()
Ставь 👍 и забирай 📚 Базу знаний