/
NonerCo
/
StudentSystem
Обзор
Документация
Войти
/
NonerCo
/
StudentSystem
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/tests/test_models.py
105 строк
4 KB
NonerCo
update src/tests/test_models.py
13 янв 2026, 20:59
13 янв 2026, 20:59
8e1d956
Код
Авторство
О чём код?
""" Тесты для моделей машинного обучения. """ import numpy as np import pytest from sklearn.datasets import make_classification from src.models import PerformancePredictor, CustomKNN class TestPerformancePredictor: """Тесты для основного предсказателя.""" @pytest.fixture def sample_data(self): """Создание тестовых данных.""" X, y = make_classification( n_samples=100, n_features=10, n_classes=3, random_state=42 ) return X, y def test_knn_initialization(self): """Тест инициализации k-NN модели.""" predictor = PerformancePredictor(model_type='knn') assert predictor.model_type == 'knn' assert hasattr(predictor, 'model') def test_random_forest_initialization(self): """Тест инициализации Random Forest модели.""" predictor = PerformancePredictor(model_type='random_forest') assert predictor.model_type == 'random_forest' def test_training(self, sample_data): """Тест обучения модели.""" X, y = sample_data predictor = PerformancePredictor(model_type='knn') results = predictor.train_and_evaluate(X, y, test_size=0.2) assert 'accuracy' in results assert 'f1_score' in results assert 0 <= results['accuracy'] <= 1 assert results['test_size'] == 20 # 20% от 100 def test_prediction(self, sample_data): """Тест предсказания для одного студента.""" X, y = sample_data predictor = PerformancePredictor(model_type='knn') predictor.train_and_evaluate(X, y, test_size=0.2) # Предсказание для первой записи prediction, proba = predictor.predict_student(X[0]) assert prediction in [0, 1, 2] # Должен быть один из классов if proba is not None: assert len(proba) == 3 # Вероятности для 3 классов class TestCustomKNN: """Тесты для кастомной реализации k-NN.""" def test_fit_predict(self): """Тест обучения и предсказания кастомного k-NN.""" X_train = np.array([[1, 2], [2, 3], [3, 4]]) y_train = np.array([0, 1, 0]) knn = CustomKNN(k=2) knn.fit(X_train, y_train) X_test = np.array([[1.5, 2.5]]) predictions = knn.predict(X_test) assert len(predictions) == 1 assert predictions[0] in [0, 1] def test_euclidean_distance(self): """Тест евклидова расстояния.""" X_train = np.array([[0, 0], [3, 4]]) y_train = np.array([0, 1]) knn = CustomKNN(k=1, distance_metric='euclidean') knn.fit(X_train, y_train) # Точка на расстоянии 5 от [3,4] и 0 от [0,0] prediction = knn.predict(np.array([[0, 0]]))[0] assert prediction == 0 def test_manhattan_distance(self): """Тест манхэттенского расстояния.""" X_train = np.array([[0, 0], [2, 2]]) y_train = np.array([0, 1]) knn = CustomKNN(k=1, distance_metric='manhattan') knn.fit(X_train, y_train) # Точка [1,1] на равном манхэттенском расстоянии от обеих prediction = knn.predict(np.array([[1, 1]]))[0] assert prediction in [0, 1] if __name__ == "__main__": pytest.main([__file__, "-v"])