/
Dinky6
/
Assessment-Question-Difficulty-Classifier
Обзор
Документация
Войти
/
Dinky6
/
Assessment-Question-Difficulty-Classifier
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/train.py
91 строка
3 KB
Dinky6
create scripts/train.py
28 дек 2025, 17:15
28 дек 2025, 17:15
30ee71c
Код
Авторство
О чём код?
#!/usr/bin/env python3 """ Скрипт для обучения модели классификации сложности вопросов """ import sys import os sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from src.data_preprocessing import load_data, prepare_features, split_data from src.feature_extraction import TextFeatureExtractor from src.model_training import DifficultyClassifier from src.evaluation import ModelEvaluator import pandas as pd import numpy as np import argparse def main(): parser = argparse.ArgumentParser(description='Train question difficulty classifier') parser.add_argument('--data', default='data/questions.csv', help='Path to data file') parser.add_argument('--model', choices=['random_forest', 'svm', 'naive_bayes'], default='random_forest', help='Model type') parser.add_argument('--tune', action='store_true', help='Perform hyperparameter tuning') parser.add_argument('--output', default='models/question_classifier.pkl', help='Output model path') args = parser.parse_args() print("=" * 60) print("Training Question Difficulty Classifier") print("=" * 60) # 1. Загрузка данных print("\n1. Loading data...") df, encoder = load_data(args.data) print(f" Loaded {len(df)} samples") print(f" Classes: {encoder.classes_}") # 2. Подготовка признаков print("\n2. Preparing features...") # Текстовые признаки feature_extractor = TextFeatureExtractor() text_features = feature_extractor.extract_features(df['question_text'].tolist()) # Простые признаки simple_features = prepare_features(df) # Объединение признаков X = np.hstack([text_features, simple_features.values]) y = df['difficulty_encoded'].values # 3. Разделение данных print("\n3. Splitting data...") X_train, X_test, y_train, y_test, scaler = split_data( pd.DataFrame(X), y, test_size=0.2, random_state=42 ) print(f" Train set: {X_train.shape[0]} samples") print(f" Test set: {X_test.shape[0]} samples") # 4. Обучение модели print(f"\n4. Training {args.model} model...") classifier = DifficultyClassifier(model_type=args.model) classifier.feature_extractor = feature_extractor classifier.scaler = scaler classifier.encoder = encoder if args.tune: print(" Performing hyperparameter tuning...") classifier.hyperparameter_tuning(X_train, y_train) classifier.train(X_train, y_train) # 5. Оценка модели print("\n5. Evaluating model...") evaluator = ModelEvaluator(classifier.model, encoder) metrics, report, cm = evaluator.evaluate(X_test, y_test, save_path='models/metrics.json') print("\nModel Performance:") for metric, value in metrics.items(): if value is not None: print(f" {metric}: {value:.4f}") # 6. Сохранение модели print(f"\n6. Saving model to {args.output}...") classifier.save_model(args.output) print("\nTraining completed successfully!") return metrics if __name__ == '__main__': main()