Top-Vorhersageprojekt für Herzkrankheiten im Jahr 2022

Veröffentlicht: 2021-05-26

Willkommen zu diesem Schritt-für-Schritt-Tutorial unseres Projekts zur Vorhersage von Herzerkrankungen. Hier erstellen Sie ein maschinelles Lernmodell, das vorhersagt, ob bei einem Patienten eine Herzerkrankung diagnostiziert werden kann oder nicht.

Sie sollten mit den Grundlagen des maschinellen Lernens und der Datenanalyse vertraut sein, um an diesem Projekt zu arbeiten. Dieses Projekt erfordert, dass Sie mit mehreren ML-Algorithmen vertraut sind, darunter Random Forest, K-NN (K-nächster Nachbar) und viele andere.

Wir werden Daten-Wrangling durchführen, filtern und sechs verschiedene ML-Algorithmen testen, um herauszufinden, welcher die optimalen Ergebnisse für unseren Datensatz bietet. Lass uns anfangen:

Inhaltsverzeichnis

Das Ziel des Heart Disease Prediction Project

Das Ziel unseres Projekts zur Vorhersage von Herzkrankheiten ist es, festzustellen, ob bei einem Patienten eine Herzkrankheit diagnostiziert werden sollte oder nicht, was ein binäres Ergebnis ist, also:

Positives Ergebnis = 1, bei dem Patienten wird eine Herzerkrankung diagnostiziert.

Negatives Ergebnis = 0, bei dem Patienten wird keine Herzerkrankung diagnostiziert.

Wir müssen herausfinden, welches Klassifikationsmodell am genauesten ist und Korrelationen in unseren Daten identifizieren. Schließlich müssen wir auch bestimmen, welche Merkmale den größten Einfluss auf unsere Diagnose von Herzerkrankungen haben.

Merkmale

Wir verwenden die folgenden 13 Merkmale (X), um unseren Prädiktor (Y) zu bestimmen:

  1. Zeitalter.
  2. Geschlecht: 1 = männlich, 0 = weiblich.
  3. (cp) Brustschmerztyp (4 Werte – Ordinal), 1. Wert: typische Angina pectoris, 2. Wert: atypische Angina pectoris, 3. Wert: nicht-anginöser Schmerz, 4. Wert: asymptomatisch.
  4. (trestbps) Ruheblutdruck.
  5. (chol) Serumcholesterin.
  6. (Fbs) – Nüchternblutzucker > 120 mg/dl.
  7. (restecg) – Ruheelektrokardiographie-Ergebnisse.
  8. (Thalach) – maximal erreichte Herzfrequenz.
  9. (exang) – belastungsinduzierte Angina.
  10. (oldpeak) – ST-Senkung, verursacht durch Belastung im Verhältnis zur Ruhe.
  11. (Steigung) – die Steigung des ST-Segments der Spitzenbelastung.
  12. (ca) – die Anzahl der durch Fluoroskopie gefärbten großen Gefäße.
  13. (thal) – maximal erreichte Herzfrequenz (Ordinal), 3 = normal, 6 = behobener Defekt, 7 = reversibler Defekt.

Schritt Nr. 1: Daten-Wrangling

Wir sehen uns zuerst den Datensatz an, mit dem wir arbeiten, indem wir ihn in ein einfacheres und verständlicheres Format konvertieren. Es würde uns helfen, die Daten angemessener zu nutzen.

importiere numpy als np

pandas als pd importieren

matplotlib als plt importieren

seegeboren als sns importieren

importiere matplotlib.pyplot als plt

filePath = '/Users/upgrad/Downloads/datasets-33180-43520-heart.csv'

Daten = pd.read_csv (Dateipfad)

data.head(5)

Zeitalter Sex vgl trestbps chol fbs restecg Thalach Exang Altgipfel Neigung ca thal Ziel
0 63 1 3 145 233 1 0 150 0 2.3 0 0 1 1
1 37 1 2 130 250 0 1 187 0 3.5 0 0 2 1
2 41 0 1 130 204 0 0 172 0 1.4 2 0 2 1
3 56 1 1 120 236 0 1 178 0 0,8 2 0 2 1
4 57 0 0 120 354 0 1 163 1 0,6 2 0 2 1

So wie uns der obige Code geholfen hat, unsere Daten in tabellarischer Form anzuzeigen, werden wir den folgenden Code für die weitere Datenverarbeitung verwenden:

print(“(Zeilen, Spalten): ” + str(data.shape))

Daten.Spalten

Der obige Code zeigt die Gesamtzahl der Zeilen und Spalten sowie die Spaltennamen in unserem Datensatz. Die Gesamtzahl der Zeilen und Spalten in unseren Daten beträgt 303 bzw. 14. Jetzt finden wir die Anzahl der eindeutigen Werte für jede Variable, indem wir die folgende Funktion verwenden:

data.nunique (Achse = 0

In ähnlicher Weise fasst die folgende Funktion den Mittelwert, die Anzahl, die Standardabweichung, das Minimum und das Maximum für die numerischen Variablen zusammen:

data.describe()

Schritt Nr. 2: EDA durchführen

Nun, da wir das Data Wrangling abgeschlossen haben, können wir eine explorative Datenanalyse durchführen. Hier sind die Hauptaufgaben, die wir in dieser Phase unseres Projekts zur Vorhersage von Herzkrankheiten durchführen werden:

Korrelationen finden

Wir erstellen eine Korrelationsmatrix, die uns hilft, die Korrelationen zwischen verschiedenen Variablen zu erkennen:

korr = daten.korr()

plt.subplots(figsize=(15,10))

sns.heatmap(corr, xticklabels=corr.columns, yticklabels=corr.columns, annot=True, cmap=sns.diverging_palette(220, 20, as_cmap=True))

sns.heatmap(corr, xticklabels=corr.columns,

yticklabels=corr.columns,

annot=Wahr,

cmap=sns.diverging_palette(220, 20, as_cmap=True))

Um unmittelbare Korrelationen zwischen Features zu finden, können wir auch Pairplots erstellen. Wir verwenden kleine Paardiagramme mit nur den kontinuierlichen Variablen, um die Beziehungen genauer zu untersuchen:

subData = data[['age','trestbps','chol','thalach','oldpeak']]

sns.pairplot (Unterdaten)

Verwenden von Violin- und Box-Plots

Mit Violin- und Box-Plots können wir die grundlegenden Statistiken und die Verteilung unserer Daten sehen. Sie können es verwenden, um die Verteilung einer bestimmten Variablen über verschiedene Kategorien hinweg zu vergleichen. Es hilft uns auch, Ausreißer in den Daten zu identifizieren. Verwenden Sie den folgenden Code:

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

sns.violinplot(x= 'target', y= 'oldpeak',hue=“sex“, inner='quartile',data= data )

plt.title("Thalachspiegel vs. Herzkrankheit",fontsize=20)

plt.xlabel("Herzkrankheitsziel", Schriftgröße=16)

plt.ylabel(“Thalach-Ebene”, Schriftgröße=16)

Im ersten Violin- und Box-Plot finden wir, dass die positiven Patienten einen niedrigeren Median für die ST-Senkung haben als die negativen Patienten. Wir werden also ein Diagramm verwenden, um den Grad der ST-Senkung und Herzerkrankungen zu vergleichen.

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

sns.boxplot(x= 'target', y= 'thalach',hue=”sex”, data=data )

plt.title("ST-Depressionslevel vs. Herzkrankheit", fontsize=20)

plt.xlabel("Herzkrankheitsziel",Schriftgröße=16)

plt.ylabel(„ST-Senkung durch Belastung im Verhältnis zur Ruhe“, Schriftgröße=16)

Hier hatten die positiven Patienten im Vergleich zu den negativen Patienten einen höheren Median für die ST-Senkung.

Filtern von Daten

Jetzt werden wir die Daten nach positiven und negativen Patienten mit Herzerkrankungen filtern. Wir beginnen mit dem Filtern von Daten nach Patienten mit positiver Herzerkrankung:

pos_data = daten[daten['ziel']==1]

pos_data.describe()

In ähnlicher Weise werden wir die Daten nach Patienten mit negativer Herzkrankheit filtern:

pos_data = data[data['target']==0]

pos_data.describe()

Schritt Nr. 3: Verwendung von Algorithmen für maschinelles Lernen

Vorbereitung

Hier bereiten wir die Daten für das Training vor, indem wir die Merkmale X und die letzte Spalte dem Prädiktor Y zuweisen:

X = data.iloc[:, :-1].values

Y = data.iloc[:, -1}.values

Dann werden wir die Daten in zwei Sätze aufteilen, Trainingssatz und Testsatz:

aus sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(X,y,test_size = 0.2, random_state = 1)

Schließlich normalisieren wir die Daten, sodass ihre Verteilung einen Mittelwert von 0 hat:

aus sklearn.preprocessing importieren Sie StandardScaler

sc = StandardSkalierer()

x_train = sc.fit_transform(x_train)

x_test = sc.transform(x_test)

Trainieren des Modells

In diesem Abschnitt verwenden wir mehrere maschinelle Lernalgorithmen und finden denjenigen, der die höchste Genauigkeit bietet:

1. Modell: Logistische Regression

aus sklearn.metrics import Classification_report

aus sklearn.linear_model import LogisticRegression

model1 = LogisticRegression(random_state=1) # Instanz des Modells abrufen

model1.fit(x_train, y_train) # Modell trainieren/anpassen

y_pred1 = model1.predict(x_test) # y Vorhersagen erhalten

print(classification_report(y_test, y_pred1)) # Ausgabegenauigkeit

Die Genauigkeit dieses Modells betrug 74 %.

2. Modell: K-NN (K-nächste Nachbarn)

aus sklearn.metrics import Classification_report

von sklearn.neighbours import KNeighboursClassifier

model2 = KNeighboursClassifier() # Instanz des Modells abrufen

model2.fit(x_train, y_train) # Modell trainieren/anpassen

y_pred2 = model2.predict(x_test) # y Vorhersagen erhalten

print(classification_report(y_test, y_pred2)) # Ausgabegenauigkeit

Die Genauigkeit dieses Modells betrug 75 %.

3. Modell: Support Vector Machine (SVM)

aus sklearn.metrics import Classification_report

aus sklearn.svm importieren SVC

model3 = SVC(random_state=1) # Instanz des Modells abrufen

model3.fit(x_train, y_train) # Modell trainieren/anpassen

y_pred3 = model3.predict(x_test) # y Vorhersagen erhalten

print(classification_report(y_test, y_pred3)) # Ausgabegenauigkeit

Die Genauigkeit dieses Modells betrug 75 %.

4. Modell: Naive-Bayes-Klassifikator

aus sklearn.metrics import Classification_report

aus sklearn.naive_bayes import GaussianNB

model4 = GaussianNB() # Instanz des Modells abrufen

model4.fit(x_train, y_train) # Modell trainieren/anpassen

y_pred4 = model4.predict(x_test) # y Vorhersagen erhalten

print(classification_report(y_test, y_pred4)) # Ausgabegenauigkeit

Die Genauigkeit dieses Modells betrug 77 %.

5. Modell: Random Forest

aus sklearn.metrics import Classification_report

aus sklearn.ensemble import RandomForestClassifier

model6 = RandomForestClassifier(random_state=1)# Instanz des Modells abrufen

model6.fit(x_train, y_train) # Modell trainieren/anpassen

y_pred6 = model6.predict(x_test) # y Vorhersagen erhalten

print(classification_report(y_test, y_pred6)) # Ausgabegenauigkeit

Dieses Modell hatte die höchste Genauigkeit von 80 %.

6. Modell: XGBoost

von xgboost import XGBClassifier

model7 = XGBClassifier(random_state=1)

model7.fit(x_Zug, y_Zug)

y_pred7 = model7.predict(x_test)

print(classification_report(y_test, y_pred7))

Die Genauigkeit dieses Modells betrug 69 %.

Nachdem wir verschiedene ML-Algorithmen getestet hatten, stellten wir fest, dass Random Forest der beste war, da er uns die optimale Genauigkeit von 80 % lieferte.

Denken Sie daran, dass jeder Genauigkeitsprozentsatz von mehr als 80 % zu gut ist, um wahr zu sein, und dass dies an einer Überanpassung liegen könnte. Deshalb ist 80 % die optimale Zahl, die erreicht werden sollte.

Schritt Nr. 4: Feature-Score finden

Hier finden wir den Feature Score, der uns hilft, wichtige Entscheidungen zu treffen, indem er uns sagt, welches Feature für unser Modell am nützlichsten war:

# wichtig werden

Wichtigkeit = model6.feature_importances_

# Feature-Bedeutung zusammenfassen

für i,v in aufzählen(wichtigkeit):

print('Feature: %0d, Ergebnis: %.5f' % (i,v))

Wir fanden heraus, dass die vier wichtigsten Merkmale die Art der Brustschmerzen (cp), die maximal erreichte Herzfrequenz (Thalach), die Anzahl der großen Gefäße (ca) und die durch Belastung verursachte ST-Senkung im Vergleich zur Ruhe (oldpeak) waren.

Fazit

Herzlichen Glückwunsch, Sie haben das Projekt zur Vorhersage von Herzerkrankungen nun erfolgreich abgeschlossen. Wir hatten 13 Merkmale, von denen wir herausfanden, dass die wichtigsten die Art der Brustschmerzen und die maximal erreichte Herzfrequenz waren.

Wir haben sechs verschiedene ML-Algorithmen getestet und festgestellt, dass Random Forest der genaueste Algorithmus war. Sie sollten dieses Modell mit dem Testset testen und sehen, wie gut dieses Modell funktioniert.

Wenn Sie andererseits mehr über maschinelles Lernen und KI erfahren möchten, empfehlen wir Ihnen, sich unsere KI-Kurse anzusehen . Sie lernen direkt von Branchenexperten und arbeiten an Branchenprojekten, in denen Sie Ihr Wissen testen können. Schauen Sie sich diese an, wenn Sie an einer Karriere in maschinellem Lernen und KI interessiert sind.

Wenn Sie mehr über maschinelles Lernen erfahren möchten, sehen Sie sich das Executive PG-Programm von IIIT-B & upGrad für maschinelles Lernen und KI an, das für Berufstätige konzipiert ist und mehr als 450 Stunden strenge Schulungen, mehr als 30 Fallstudien und Aufgaben, IIIT, bietet -B Alumni-Status, mehr als 5 praktische Schlusssteinprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Wie hilft maschinelles Lernen dem Gesundheitssektor?

Es gibt heute viele interessante Anwendungen des maschinellen Lernens im Gesundheitswesen. Eine seiner Hauptanwendungen ist die Erkennung und Diagnose von Krankheiten. Angefangen bei der Erkennung seltener genetischer Krankheiten bis hin zu frühen Krebsstadien hat sich maschinelles Lernen in dieser Hinsicht als große Hilfe erwiesen. Es gibt viele andere Anwendungen, wie die Entdeckung von Medikamenten, bildgebende Diagnose, Führung intelligenter Gesundheitsakten, Präventivmedizin wie Verhaltensänderung, Vorhersage von Krankheitsausbrüchen und -rezidiven, Verbesserung der Strahlentherapie, effiziente klinische Forschung und Patientenstudien und mehr.

Wie werde ich Healthcare Data Scientist?

Angesichts der Tatsache, dass die Gesundheitsbranche eine der umfangreichsten Datenquellen der Welt ist, wird erwartet, dass die Nachfrage nach Healthcare Data Scientists steigen wird. Die Verschmelzung von Gesundheitsversorgung und Datenwissenschaft ist ein vielversprechender und fruchtbarer Weg, und angehende Gesundheitsdatenwissenschaftler können von dieser Situation profitieren. Healthcare Data Science ist ein relativ neues Gebiet; es ist eine Mischung aus Statistik, Mathematik, Bioinformatik, Informatik und Epidemiologie. Die Grundlagen und Fähigkeiten, um Data Scientist zu werden, sind dieselben, aber Ihr Fokus liegt ausschließlich auf Gesundheitsdaten und -anwendungen. Kenntnisse in der Computerprogrammierung mit Python, R und SAS sind hilfreich. Top-Universitäten weltweit bieten spezialisierte Postgraduiertenprogramme in Healthcare Data Science an.

Müssen Ärzte Data Science beherrschen?

Da KI und Data Science schnell Eingang in den Mainstream finden, sind dies mehr als nur Schlagworte im Gesundheitswesen. Die immense Bedeutung dieser Technologien beim Extrahieren klinisch nützlicher Informationen aus riesigen Datensätzen ermutigt Ärzte und Ärztinnen, sich erneut für diese Bereiche zu interessieren. Die Kenntnis der Datenwissenschaft bietet Ärzten einen zusätzlichen Vorteil, da sie seltene Krankheiten anhand von Multiparameter-Informationen und riesigen Datensätzen, die aus kontinuierlicher Überwachung stammen, schnell und genau diagnostizieren können. KI unterstützt die Diagnose durch effektive Datenvisualisierungstechniken und hilft ihnen, die statistische Bedeutung klinischer Studien einzuschätzen.