Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МО_Иванова_4117_ЛР_1.docx
Скачиваний:
1
Добавлен:
29.04.2025
Размер:
719.95 Кб
Скачать

Приложение а.

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')

Соседние файлы в предмете Машинное обучение