Первичная версия: стилометрия реплик, LSA и протокол экспериментов

This commit is contained in:
2026-10-24 01:17:36 +03:00
commit c390224500
52 changed files with 10099 additions and 0 deletions

35
lab1/tests/test_cv.py Normal file
View File

@@ -0,0 +1,35 @@
"""Тесты кросс-валидации на синтетических данных."""
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"]