1. Вычислим метрики классификации.
tp = 60
fp = 15
fn = 25
tn = 100
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.800
Recall: 0.706
F1-score: 0.750
Precision характеризует точность положительных прогнозов, а
Recall — полноту обнаружения положительных объектов.
2. Вычислим MAE и RMSE.
import numpy as np
from sklearn.metrics import (
mean_absolute_error,
mean_squared_error
)
y_true = np.array([100, 150, 200, 250, 300])
y_pred = np.array([110, 145, 210, 230, 280])
absolute_errors = np.abs(
y_true - y_pred
)
mae = mean_absolute_error(
y_true, y_pred
)
rmse = np.sqrt(
mean_squared_error(y_true, y_pred)
)
print("Абсолютные ошибки:", absolute_errors)
print("MAE:", round(mae, 3))
print("RMSE:", round(rmse, 3))
Результат:
Абсолютные ошибки: [10, 5, 10, 20, 20]
MAE: 13.0
RMSE: 14.663
MAE показывает среднюю абсолютную величину ошибки.
RMSE сильнее реагирует на большие отклонения, поскольку
ошибки возводятся в квадрат перед усреднением.
3. Выполним перекрёстную проверку и независимую
тестовую оценку.
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 (
precision_score,
recall_score,
f1_score,
roc_auc_score
)
X, y = make_classification(
n_samples=400,
n_features=6,
n_informative=4,
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)
)
cv_scores = cross_val_score(
model,
X_train,
y_train,
cv=5,
scoring="f1"
)
print("Средний CV F1:", round(cv_scores.mean(),
3))
model.fit(X_train, y_train)
predictions = model.predict(X_test)
probabilities = model.predict_proba(X_test)[:, 1]
print(
"Precision:",
round(precision_score(y_test, predictions), 3)
)
print(
"Recall:",
round(recall_score(y_test, predictions), 3)
)
print(
"F1:",
round(f1_score(y_test, predictions), 3)
)
print(
"ROC-AUC:",
round(roc_auc_score(y_test, probabilities), 3)
)
Перекрёстная проверка проводится только на обучающей
выборке.
Тестовые данные используются после завершения обучения и
выбора модели.
ROC-AUC характеризует способность модели ранжировать
положительные объекты выше отрицательных. При редких положительных классах
дополнительно необходимо анализировать Precision, Recall, кривую
Precision–Recall и базовую частоту события.
Использование тестовой выборки для выбора гиперпараметров
приводит к завышению оценки качества, поскольку модель косвенно подстраивается
под тестовые данные.