
Приложение а.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import OrdinalEncoder
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn import metrics
raw_data = pd.read_csv("/content/drive/MyDrive/student-mat.csv")
raw_data.head()
raw_column_name = str(raw_data.columns[0]) # Получение объединенного заголовка
heads = raw_column_name.split(';') # Разделение заголовков
values = raw_data[raw_column_name].to_list()
splited_values = []
for i in range (0,len(values)):
splited_values.append(values[i].split(';'))
df = pd.DataFrame(splited_values, columns = heads)
df.head()
df.info()
df = df.rename(columns={'Pstatus': 'p_status', 'Medu': 'm_edu',
'Fedu': 'f_edu','Medu': 'm_edu',
'Mjob': 'm_job','Fjob': 'f_job',
'Dalc': 'd_alc','Walc': 'w_alc',
})
encoder = OrdinalEncoder() # создание объекта кодировщика
encoder.fit(df) # обучение кодировщика
data_ordinal = pd.DataFrame(encoder.transform(df),columns=df.columns)
# формирование датасета из конвертированных данных
sc = MinMaxScaler() # создание стандартизатора
data_scaled = sc.fit_transform(data_ordinal) # обучение стандартизатора
data_scaled = pd.DataFrame(data_scaled, columns=heads) # формирование датасета из стандартизированных данных
target = data_ordinal['G1'] # целевой признак - оценка в первом периоде
data = data_scaled.drop(['school','G1','G2','G3'], axis=1) # анализируемые данные
X_train, X_test, y_train, y_test = train_test_split(data, target,test_size=0.2, random_state=42) # разделение на выборки
# Создание последовательной модели
model = Sequential()
model.add(Dense (29, input_dim = 29, activation='relu')) # Входной слой
model.add(Dense(14, activation='relu')) # Скрытый слой
model.add(Dense(1)) # Выходной слой
model.compile(loss="mse", optimizer="adam", metrics=["mae"]) # параметры модели
history = model.fit(X_train, y_train, epochs=50, validation_data=(X_test, y_test)) # обучение НС
model.summary()
y_pred = model.predict(X_test).round().T[0]
df_match = pd.DataFrame({'actual': y_test, 'predicted': y_pred })
df_match
plt.figure(figsize=(10,8))
plt.scatter(X_test.index, y_test, color='green', label='Валидационные точки')
plt.scatter(X_test.index, y_pred, color='purple', label='Предсказанные точки')
plt.legend(fontsize=15, loc='lower right')
plt.xlabel('X')
plt.ylabel('Y')
plt.figure(figsize=(10,8))
plt.plot(history.history['loss'], label='Потери на обучении')
plt.plot(history.history['val_loss'], label = 'Потери на валидации')
plt.xlabel('Epoch')
plt.ylabel('Losses')
plt.legend(loc='lower right')
plt.figure(figsize=(10,8))
plt.plot(history.history['mae'], label='Средняя ошибка на обучении')
plt.plot(history.history['val_mae'], label='Средняя ошибка на валидации')
plt.xlabel('Epoch')
plt.ylabel('MAE')
plt.legend(loc='lower right')