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

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

heart_data = pd.read_csv("/content/drive/MyDrive/4heart2.csv")

heart_data.info()

sc = MinMaxScaler()

data_scaled_h = sc.fit_transform(heart_data)

data_scaled_h = pd.DataFrame(data_scaled_h, columns=heart_data.columns)

data_scaled_h

target_h = data_scaled_h['DEATH_EVENT'] # то что предсказываем

data_h = data_scaled_h.drop(['DEATH_EVENT'], axis=1) # анализируемые данные

X_train_h, X_test_h, y_train_h, y_test_h = train_test_split(data_h, target_h,test_size=0.2, random_state=33) # выделение тренировочной / валидационной выборок

model_2 = Sequential() # создание последовательной модели

model_2.add(Dense (12, input_dim = 12, activation='relu'))   # Входной слой

model_2.add(Dense(1, activation='sigmoid'))     # Выходной слой

model_2.compile(loss="binary_crossentropy", optimizer="adam", metrics=["mae"])  # параметры НС

history_h = model_2.fit(X_train_h, y_train_h, epochs=50, validation_data=(X_test_h, y_test_h))  # обучение НС

y_h_pred = model_2.predict(X_test_h).round(2).T[0]

df_match_h = pd.DataFrame({'actual': y_test_h, 'predicted': y_h_pred })

df_match_h.head(10)

plt.figure(figsize=(10,8))

plt.plot(history_h.history['loss'], label='Потери на обучении')

plt.plot(history_h.history['val_loss'], label='Потери на валидации')

plt.xlabel('Epoch')

plt.ylabel('Losses')

plt.legend(loc='lower right')

plt.figure(figsize=(10,8))

plt.plot(history_h.history['mae'], label='Метрика качества на обучении')

plt.plot(history_h.history['val_mae'], label = 'Метрика качества на валидации')

plt.xlabel('Epoch')

plt.ylabel('MAE')

plt.legend(loc='lower right')

fpr, tpr, _ = roc_curve(y_test_h.to_numpy(), y_h_pred)

roc_auc = auc(fpr, tpr)

plt.figure(figsize=(10,8))

plt.plot(fpr, tpr)

plt.xlabel('False Positive Rate (FPR)', fontsize=14)

plt.ylabel('True Positive Rate (TPR)', fontsize=14)

plt.grid(True)

plt.show()

pred_v = []

actual = df_match_h['actual'].to_numpy()

for i in df_match_h['predicted']:

  if i < 0.5:

    pred_v.append(0)

  else:

    pred_v.append(1)

sovpalo = 0

for i in range (0,len(actual)):

  if pred_v[i] == actual[i]:

    sovpalo = sovpalo + 1

print(sovpalo / len(pred_v))  

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

from tensorflow.keras.layers import Dropout

model_new =Sequential() # модель последовательная

model_new.add(Dense (64, input_dim = 29, activation='relu'))      # входной слой

model_new.add(Dropout(0.2))                                       # обнуление выходов

model_new.add(Dense(64, activation='relu'))                       # скрытый слой 1

model_new.add(Dropout(0.2))                                       # обнуление выходов

model_new.add(Dense(16, activation='relu'))                       # скрытый слой 2

model_new.add(Dropout(0.2))                                       # обнуление выходов

model_new.add(Dense(1,activation='relu'))                         # выходной слой          

model_new.compile(loss="mse", optimizer="adam", metrics=["mae"])

new_history = model_new.fit(X_train, y_train, epochs=30, validation_data=(X_test, y_test))  # обучение НС

# построение графика

plt.figure(figsize=(10,8))

plt.plot(new_history.history['loss'], label='Потери на обучении')

plt.plot(new_history.history['val_loss'], label='Потери на валидации')

plt.xlabel('Epoch')

plt.ylabel('Losses')

plt.legend(loc='lower right')

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