Deep Learning
February 2

🤖 Построение нейронной сети для прогнозирования оценок студентов | 2 часть

📌 Введение

Эта статья является продолжением серии обучающих материалов по прогнозированию оценок студентов. В предыдущем материале мы рассмотрели применение линейной регрессии, а теперь изучим более продвинутый метод — нейронные сети. Нейронные сети позволяют находить сложные зависимости в данных, что делает их отличным инструментом для предсказания успеваемости студентов.

🏗️ Подготовка окружения

Перед началом работы установим необходимые библиотеки:

pip install tensorflow pandas numpy matplotlib seaborn scikit-learn

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import tensorflow as tf from tensorflow.keras import Sequential from tensorflow.keras.layers import Dense

📂 Загрузка данных

Мы будем использовать тот же датасет Student Performance Dataset с платформы Kaggle. Перед началом загрузите и разархивируйте его.

data = pd.read_csv('data.csv') print(data.head())

Загрузка данных

🔎 Анализ данных

Построим корреляционную матрицу, чтобы увидеть, какие факторы сильнее всего связаны с итоговой оценкой:

plt.figure(figsize=(10, 6)) sns.heatmap(data.corr(), annot=True, cmap='coolwarm', fmt='.2f', linewidths=0.5) plt.title('Корреляционная матрица') plt.show()

Построим корреляционную матрицу

⚙️ Предобработка данных

Разделим данные на признаки (X) и целевую переменную (y) и нормализуем их для корректной работы нейросети:

X = data.drop(columns=['Grades']) y = data['Grades']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test)

🧠 Построение нейронной сети

Создадим нейросеть с двумя скрытыми слоями (64 и 32 нейрона), используя ReLU-активацию и Adam-оптимизатор:

model = Sequential([ Dense(64, input_dim=X_train_scaled.shape[1], activation='relu'), Dense(32, activation='relu'), Dense(1) # Выходной слой (регрессия) ])

model.compile(optimizer='adam', loss='mean_squared_error') model.summary()

Построение нейронной сети

🎯 Обучение модели

Запустим обучение модели на 100 эпох с мини-пакетами по 32 примера:

history = model.fit(X_train_scaled, y_train, epochs=100, batch_size=32, validation_data=(X_test_scaled, y_test))

Построим график потерь (loss) на тренировочных и валидационных данных:

plt.figure(figsize=(8, 6)) plt.plot(history.history['loss'], label='Training Loss') plt.plot(history.history['val_loss'], label='Validation Loss') plt.xlabel('Эпохи') plt.ylabel('Потери') plt.legend() plt.title('График обучения нейросети') plt.show()

график потерь (loss) на тренировочных и валидационных данных

📊 Оценка модели

Оценим модель на тестовых данных:

test_loss = model.evaluate(X_test_scaled, y_test) print(f'🔍 Итоговая ошибка (MSE): {test_loss}')

📈 Сравнение фактических и предсказанных оценок

Создадим диаграмму рассеяния, чтобы увидеть, насколько предсказанные оценки совпадают с реальными:

y_pred = model.predict(X_test_scaled) plt.figure(figsize=(12, 6)) plt.scatter(y_test, y_pred, color='blue', label='Предсказания') plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color='red', linestyle='dashed', label='Идеальная линия') plt.xlabel('Фактические оценки') plt.ylabel('Предсказанные оценки') plt.legend() plt.title('Фактические vs Предсказанные оценки студентов') plt.show()

Сравнение фактических и предсказанных оценок

🔥 Заключение

Нейронные сети позволяют строить мощные модели для предсказания сложных зависимостей. В этой статье мы рассмотрели: ✅ Подготовку данных и их предобработку ✅ Создание и обучение нейронной сети ✅ Визуализацию результатов

Такие модели могут помочь образовательным учреждениям выявлять факторы, влияющие на успеваемость студентов, и разрабатывать стратегии для их улучшения. 🚀

Попробуйте реализовать этот проект самостоятельно и улучшите предсказания, добавляя новые параметры в модель, код в Google Coral! 🎓

📢 Подписывайтесь, чтобы не пропустить новые материалы!
🔹 Teletype.in – блог о машинном обучении
🔹 Телеграм-канал – свежие новости и обсуждения