🤖 Построение нейронной сети для прогнозирования оценок студентов | 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()
📊 Оценка модели
Оценим модель на тестовых данных:
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 – блог о машинном обучении
🔹 Телеграм-канал – свежие новости и обсуждения