Пример 1. Вычисление Precision, Recall и F1-score
Для оценки качества бинарной классификации используется
матрица ошибок, содержащая четыре значения:
Основные метрики:
Precision = TP / (TP + FP)
Recall = TP / (TP + FN)
F1 = 2 × Precision × Recall / (Precision +
Recall)
Рассмотрим пример из лекции:
TP = 40, FP = 10, FN = 20.
Реализация на Python:
tp = 40
fp = 10
fn = 20
precision = tp / (tp + fp)
recall = tp / (tp + fn)
f1 = (
2 * precision *
recall
/ (precision +
recall)
)
print("Precision:", round(precision, 3))
print("Recall:", round(recall, 3))
print("F1-score:", round(f1, 3))
Результат:
Precision: 0.8
Recall: 0.667
F1-score: 0.727
Precision показывает долю действительно положительных
объектов среди всех объектов, предсказанных как положительные.
Recall показывает долю найденных положительных объектов
среди всех фактически положительных.
F1-score объединяет precision и recall в одну метрику.
Пример 2. Оценка регрессии с помощью MAE и RMSE
Для оценки качества регрессионных моделей используются
метрики MAE и RMSE.
MAE вычисляет среднюю абсолютную ошибку:
MAE = (1/n) × Σ|yᵢ − ŷᵢ|
RMSE вычисляет квадратный корень из средней квадратичной
ошибки:
RMSE = √[(1/n) × Σ(yᵢ −
ŷᵢ)²]
RMSE сильнее реагирует на крупные ошибки прогноза.
Реализация на Python:
import numpy as np
from sklearn.metrics import (
mean_absolute_error,
mean_squared_error
)
y_true = np.array([10, 20, 30, 40])
y_pred = np.array([12, 18, 29, 35])
mae = mean_absolute_error(
y_true, y_pred
)
rmse = np.sqrt(
mean_squared_error(y_true, y_pred)
)
print("MAE:", round(mae, 3))
print("RMSE:", round(rmse, 3))
Результат:
MAE: 2.5
RMSE: 2.915
Абсолютные ошибки составляют 2, 2, 1 и 5.
MAE усредняет эти значения, а RMSE сильнее учитывает ошибку
величиной 5.
Выбор метрики должен соответствовать практической задаче и
стоимости ошибок.
Пример 3. Разделение данных и перекрёстная проверка
Для достоверной оценки качества необходимо разделять данные
на обучающую, валидационную и тестовую части.
Обучающая выборка используется для определения параметров
модели.
Валидация или перекрёстная проверка применяется для выбора
гиперпараметров.
Тестовая выборка предназначена для окончательной независимой
оценки.
Реализация на Python:
from sklearn.datasets import make_classification
from sklearn.model_selection import (
train_test_split,
cross_val_score
)
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
X, y = make_classification(
n_samples=300,
n_features=5,
n_informative=3,
n_redundant=0,
random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
stratify=y,
random_state=42
)
model = make_pipeline(
StandardScaler(),
LogisticRegression(max_iter=1000)
)
scores = cross_val_score(
model,
X_train,
y_train,
cv=5,
scoring="f1"
)
print("F1 по блокам:", scores)
print("Средний F1:", round(scores.mean(), 3))
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print(classification_report(
y_test,
predictions,
zero_division=0
))
Перекрёстная проверка позволяет оценить качество модели на
нескольких разбиениях обучающих данных.
Использование Pipeline обеспечивает выполнение
масштабирования внутри каждого обучающего разбиения и помогает избежать утечки
информации.
Тестовая выборка не используется при выборе гиперпараметров.