Vorhersage von Herzinsuffizienz: Die Kraft künstlicher neuronaler Netze freisetzen | von Stoyan Shterev | Juni 2023

0
27


Einführung

Herzinsuffizienz ist eine weit verbreitete und potenziell lebensbedrohliche Erkrankung, von der Millionen Menschen weltweit betroffen sind. Die frühzeitige Erkennung und genaue Vorhersage einer Herzinsuffizienz sind für eine wirksame Intervention und verbesserte Patientenergebnisse von entscheidender Bedeutung. In den letzten Jahren haben sich künstliche neuronale Netze (ANNs) zu einem leistungsstarken Werkzeug im Gesundheitswesen entwickelt und bieten bemerkenswerte Möglichkeiten zur Vorhersage von Herzinsuffizienz. In diesem Artikel werden wir die faszinierende Welt des KNN-basierten Vorhersagemodells und seine möglichen Auswirkungen auf die Erkennung und Behandlung von Herzinsuffizienz erkunden.

Was machen wir in diesem Artikel:

  1. Erkunden Sie die Daten
  2. Datenvorverarbeitung
  3. Erstellen und trainieren Sie das Modell
  4. Prognostizieren Sie eine Herzinsuffizienz anhand der Patientendaten

Erkunden Sie die Daten

Die Daten, die wir verwenden werden, stammen aus Dieser Datensatz.

data_df = pd.read_csv("heart_failure_clinical_records_dataset.csv")
data_df.data()

Zu den Daten:

  • Alter: Alter des Patienten
  • Anämie: Hämoglobinspiegel des Patienten (Boolesch)
  • Kreatinin_Phosphokinase: Spiegel des CPK-Enzyms im Blut (mcg/L)
  • Diabetes: Wenn der Affected person Diabetes hat (Boolesch)
  • Ejektionsfraktion: Prozentsatz des Blutes, das bei jeder Kontraktion das Herz verlässt
  • Bluthochdruck: Wenn der Affected person Bluthochdruck hat (Boolesch)
  • Blutplättchen: Blutplättchenzahl (Kiloplättchen/ml)
  • serum_kreatinin: Serumkreatininspiegel im Blut (mg/dl)
  • serum_natrium: Serumnatriumspiegel im Blut (mEq/L)
  • Intercourse: Geschlecht des Patienten
  • Rauchen: Ob der Affected person raucht oder nicht (Boolean)
  • Zeit: Nachbeobachtungszeitraum (Tage)
  • DEATH_EVENT: Wenn der Affected person während der Nachbeobachtungszeit verstorben ist (Boolesch) [Attributes having Boolean values: 0 = Negative (No); 1 = Positive (Yes)]

Alle Attribute enthalten 299 gültige Einträge, was darauf hinweist, dass keine Werte fehlen. Die Datentypen sind entweder „float64“ oder „int64“, wodurch sie problemlos für die Einspeisung in einen Algorithmus kompatibel sind.

Sehen wir uns die Daten zu den Überlebenden und Verstorbenen aus diesem Datensatz an:

cols= ["#B9FABE","#FF0000"]
ax = sns.countplot(x= data_df["DEATH_EVENT"], palette= cols)
ax.set_xticklabels(['Survived', 'Deceased '])
ax.bar_label(ax.containers[0])

Die Daten scheinen sehr unausgewogen zu sein, da es sich bei den Angaben um 203 Überlebende gegenüber 96 Verstorbenen handelt.

data_df.describe().T

Die Merkmale „Kreatinin_Phosphokinase“ und „Serum_Kreatinin“ weisen eine erhebliche Schiefe auf. Andererseits weisen die übrigen Merkmale eine nahezu normale Verteilung auf, was daran zu erkennen ist, dass ihre Mittelwerte gleich ihren jeweiligen Medianwerten sind.

Lassen Sie uns die Korrelation zwischen den Variablen in den Daten überprüfen:

cmap = sns.diverging_palette(2, 155, s=90, l=50, n=7)
corrmat = data_df.corr()
plt.subplots(figsize=(12,12))
sns.heatmap(corrmat,cmap= cmap,annot=True, sq.=True)

Was sagen uns diese Daten?

Der Zeitpunkt der Nachsorgeuntersuchung des Patienten spielt im Zusammenhang mit Herz-Kreislauf-Erkrankungen eine entscheidende Rolle, da eine frühzeitige Diagnose und rechtzeitige Behandlung das Sterberisiko deutlich senken. Dieser Zusammenhang zwischen dem Zeitpunkt des Nachuntersuchungsbesuchs und der Wahrscheinlichkeit eines Todesfalls ist umgekehrt proportional. Die Variable „ejection_fraction“ übt einen erheblichen Einfluss auf die Zielvariable aus, was zu erwarten ist, da sie die Leistungsfähigkeit des Herzens darstellt. Das Alter des Patienten ist das am dritthäufigsten korrelierende Merkmal. Offensichtlich nimmt die Funktion des Herzens mit zunehmendem Alter ab. Serumkreatinin (0,29) korreliert positiv und Natrium (-0,20) negativ mit dem Sterberisiko.
Bemerkenswert ist, dass Lebensstilfaktoren wie Rauchen (-0,01) und Diabetes (0,00) entweder keine oder nur eine schwache Korrelation mit dem Sterberisiko zeigten.

Lassen Sie uns einige dieser nicht-binären Funktionen auf mögliche Ausreißer überprüfen Violinplot Und Schwarmplot:

characteristic = ["age","creatinine_phosphokinase","ejection_fraction","platelets","serum_creatinine","serum_sodium", "time"]
for i in characteristic:
plt.determine(figsize=(10,10))
sns.swarmplot(x=data_df["DEATH_EVENT"], y=data_df[i], colour="black", alpha=0.5)
sns.violinplot(x=data_df["DEATH_EVENT"], y=data_df[i], palette=cols)
plt.present()

Für die oben genannten Variablen werden Ausreißer beobachtet.
Diese Diskrepanz könnte auf mögliche Messfehler oder spezifische Faktoren für die Merkmale der Studienpopulation zurückzuführen sein.

Datenvorverarbeitung

Geplante Schritte für die Datenvorverarbeitung:

  • Entfernen der Ausreißer basierend auf der Datenanalyse
  • Zuweisen von Werten zu Options als X und Ziel als Y
  • Führen Sie die Skalierung der Options durch
  • Geteilte Check- und Trainingssätze
X=data_df.drop(["DEATH_EVENT"],axis=1)
y=data_df["DEATH_EVENT"]
col_names = record(X.columns)
s_scaler = preprocessing.StandardScaler()
X_scaled= s_scaler.fit_transform(X)
X_scaled = pd.DataFrame(X_scaled, columns=col_names)
X_scaled.describe().T
#spliting variables into coaching and take a look at units
X_train, X_test, y_train,y_test = train_test_split(X_scaled,y,test_size=0.30,random_state=25)

Erstellen und trainieren Sie das Modell

Geplante Schritte zum Erstellen und Trainieren des Modells:

  • Initialisierung des ANN
  • Fügen Sie Ebenen hinzu
  • Zusammenstellen des ANN
  • Trainiere die ANN
early_stopping = callbacks.EarlyStopping(
min_delta=0.001, # minimium quantity of change to rely as an enchancment
persistence=25, # what number of epochs to attend earlier than stopping
restore_best_weights=True)

# Initializing the NN
mannequin = Sequential()

# layers
mannequin.add(Dense(items = 24, kernel_initializer = 'uniform', activation = 'relu', input_dim = 12))
mannequin.add(Dense(items = 12, kernel_initializer = 'uniform', activation = 'relu'))
mannequin.add(Dropout(0.25))
mannequin.add(Dense(items = 12, kernel_initializer = 'uniform', activation = 'relu'))
mannequin.add(Dropout(0.5))
mannequin.add(Dense(items = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))

# Compiling the ANN
mannequin.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

# Practice the ANN
historical past = mannequin.match(X_train, y_train, batch_size = 25, epochs = 60,callbacks=[early_stopping], validation_split=0.25)

Die während der Kompilierung verwendete Verlustfunktion ist „binary_crossentropy“, die durch die folgende Gleichung definiert ist:

Binäre Kreuzentropiegleichung

Wo „yi„ist der binäre Indikator (0 oder 1), der die Klasse für die Stichprobe angibt, während „Pi„bezeichnet die vorhergesagte Wahrscheinlichkeit zwischen 0 und 1 für diese Stichprobe.

Hier ist ein Beispiel des Trainingsprozesses:

Die Genauigkeit des Testsatzes beträgt:

val_accuracy = np.imply(historical past.historical past['val_accuracy'])
print("npercents: %.2f%%" % ('val_accuracy is', val_accuracy*100))

Das Ergebnis ist eine Genauigkeit von 86,35 % auf dem Testsatz, was zufriedenstellend ist.

Darstellung von Trainings- und Validierungsverlusten, Trainings- und Validierungsgenauigkeit über Epochen:

Prognostizieren Sie eine Herzinsuffizienz anhand der Patientendaten

Mit der Verfügbarkeit eines Modells, das eine zufriedenstellende Genauigkeit des Testsatzes zeigt, können wir nun Herzinsuffizienz auf der Grundlage der in unserem Datensatz vorhandenen Merkmale vorhersagen.

# Predicting the take a look at set outcomes
y_pred = mannequin.predict(X_test)
y_pred = (y_pred > 0.4)
np.set_printoptions()
print(classification_report(y_test, y_pred))

Trotz der Genauigkeit ist offensichtlich, dass die Präzision, der Rückruf und der f1-Rating des Modells nicht so hoch sind.

Den vollständigen Quellcode finden Sie im Google Colaboratory Pocket book Hier.

Abschluss

ANNs bieten einen vielversprechenden Weg, die Vorhersage von Herzinsuffizienz zu revolutionieren. Ihre Fähigkeit, aus komplexen medizinischen Datensätzen zu lernen, komplizierte Muster zu erkennen und sich an sich entwickelnde Patientenprofile anzupassen, kann Früherkennungs- und Interventionsstrategien erheblich verbessern. Da Forscher und medizinisches Fachpersonal Hand in Hand arbeiten, wird das Potenzial, mithilfe von KNN-Modellen neue Erkenntnisse zur Vorhersage von Herzinsuffizienz zu gewinnen, immer größer. Durch kontinuierliche Fortschritte und Integration in die klinische Praxis ist die KNN-basierte Herzinsuffizienzvorhersage der Schlüssel zu einer gesünderen Zukunft für Personen, bei denen das Risiko dieser schwächenden Erkrankung besteht.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here