
Приложение 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')