Files
NLP/lab1/tests/test_cv.py

36 lines
1.1 KiB
Python

"""Тесты кросс-валидации на синтетических данных."""
from __future__ import annotations
import numpy as np
import pandas as pd
from stylometry.cv import run_repeated_cv
def test_repeated_cv_runs_and_has_all_predictions() -> None:
rng = np.random.default_rng(0)
n_samples = 60
n_classes = 3
X = pd.DataFrame(
{
"feature_1": rng.normal(size=n_samples),
"feature_2": rng.normal(size=n_samples),
}
)
y = np.repeat([f"c{index}" for index in range(n_classes)], 20)
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
pipeline = Pipeline(
[("scale", StandardScaler()), ("model", LogisticRegression(max_iter=1000))]
)
result = run_repeated_cv(
pipeline, X, y, n_splits=3, n_repeats=2, seed=42, verbose=False
)
assert len(result.oof) == n_samples * 2
assert set(result.oof["y_true"]) == set(y)
assert result.fold_metrics["macro_f1"].between(0, 1).all()
assert result.labels.tolist() == ["c0", "c1", "c2"]