Proyek Prediksi Penyakit Jantung Teratas Tahun 2022

Diterbitkan: 2021-05-26

Selamat datang di tutorial langkah demi langkah proyek prediksi penyakit jantung kami ini. Di sini, Anda akan membuat model pembelajaran mesin yang memprediksi apakah pasien dapat didiagnosis menderita penyakit jantung atau tidak.

Anda harus terbiasa dengan dasar-dasar pembelajaran mesin dan analisis data untuk mengerjakan proyek ini. Proyek ini mengharuskan Anda untuk terbiasa dengan beberapa algoritma ML, termasuk Random Forest, K-NN (K-nearest tetangga), dan banyak lainnya.

Kami akan melakukan perselisihan data, pemfilteran, dan menguji enam algoritme ML yang berbeda untuk menemukan mana yang menawarkan hasil optimal untuk kumpulan data kami. Mari kita mulai:

Daftar isi

Tujuan Proyek Prediksi Penyakit Jantung

Tujuan dari proyek prediksi penyakit jantung kami adalah untuk menentukan apakah seorang pasien harus didiagnosis dengan penyakit jantung atau tidak, yang merupakan hasil biner, jadi:

Hasil positif = 1, pasien akan didiagnosa penyakit jantung.

Hasil negatif = 0, pasien tidak akan terdiagnosis penyakit jantung.

Kita harus menemukan model klasifikasi mana yang memiliki akurasi terbesar dan mengidentifikasi korelasi dalam data kita. Terakhir, kita juga harus menentukan fitur mana yang paling berpengaruh dalam diagnosis penyakit jantung kita.

Fitur

Kami menggunakan 13 fitur berikut (X) untuk menentukan prediktor kami (Y):

  1. Usia.
  2. Jenis Kelamin: 1 = Pria, 0 = Wanita.
  3. (cp) jenis nyeri dada (4 nilai – Ordinal), nilai pertama: angina tipikal, nilai kedua: angina atipikal, nilai ketiga: nyeri non-angina, nilai keempat: asimtomatik.
  4. (trestbps) tekanan darah istirahat.
  5. (kol) kolesterol serum.
  6. (Fbs) – gula darah puasa > 120 mg/dl.
  7. (restecg) – hasil elektrokardiografi istirahat.
  8. (thalach) – detak jantung maksimum tercapai.
  9. (exang) – angina yang diinduksi oleh olahraga.
  10. (oldpeak) - ST depresi yang disebabkan oleh olahraga relatif terhadap istirahat.
  11. (kemiringan) – kemiringan segmen ST latihan puncak.
  12. (ca) – jumlah pembuluh darah utama yang diwarnai dengan fluoroskopi.
  13. (thal) – detak jantung maksimum dicapai (Ordinal), 3 = normal, 6 = cacat tetap, 7 = cacat reversibel.

Langkah #1: Perselisihan Data

Pertama-tama kita akan melihat kumpulan data yang sedang kita kerjakan dengan mengubahnya menjadi format yang lebih sederhana dan lebih mudah dipahami. Ini akan membantu kami menggunakan data dengan lebih tepat.

impor numpy sebagai np

impor panda sebagai pd

impor matplotlib sebagai plt

impor seaborn sebagai sns

impor matplotlib.pyplot sebagai plt

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

data = pd.read_csv(filePath)

data.head(5)

usia seks cp trestbps coklat fbs restecg thalach exang oldpeak lereng ca thal target
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

Sama seperti kode di atas membantu kami menampilkan data kami dalam bentuk tabel, kami akan menggunakan kode berikut untuk perselisihan data lebih lanjut:

print(“(Baris, kolom): ” + str(data.bentuk))

data.columns

Kode di atas akan menunjukkan jumlah baris dan kolom dan nama kolom dalam dataset kami. Jumlah total baris dan kolom dalam data kami masing-masing adalah 303 dan 14. Sekarang kita akan menemukan jumlah nilai unik untuk setiap variabel dengan menggunakan fungsi berikut:

data.nunique(sumbu=0

Demikian pula, fungsi berikut merangkum mean, count, standar deviasi, minimum dan maksimum untuk variabel numerik:

data.deskripsi()

Langkah #2: Melakukan EDA

Sekarang kita telah menyelesaikan perselisihan data, kita dapat melakukan analisis data eksplorasi. Berikut adalah tugas utama yang akan kami lakukan dalam tahap proyek prediksi penyakit jantung ini:

Menemukan Korelasi

Kami akan membuat matriks korelasi yang membantu kami melihat korelasi antara variabel yang berbeda:

corr = data.corr()

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=Benar,

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

Untuk menemukan korelasi langsung antar fitur, kita juga dapat membuat plot berpasangan. Kami akan menggunakan plot pasangan kecil dengan hanya variabel kontinu untuk melihat lebih dalam ke dalam hubungan:

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

sns.pairplot(subData)

Menggunakan Biola dan Box Plot

Dengan plot Biola dan Kotak kita dapat melihat statistik dasar dan distribusi data kita. Anda dapat menggunakannya untuk membandingkan distribusi variabel tertentu di berbagai kategori. Ini akan membantu kami mengidentifikasi outlier dalam data juga. Gunakan kode berikut:

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

sns.violinplot(x= 'target', y= 'oldpeak',hue=”seks”, inner='kuartil',data= data )

plt.title("Tingkat Thalach vs. Penyakit Jantung", ukuran font=20)

plt.xlabel(“Target Penyakit Jantung”, ukuran font=16)

plt.ylabel(“Thalach Level”, ukuran font=16)

Pada plot Biola dan Kotak pertama, kami menemukan bahwa pasien positif memiliki median depresi ST yang lebih rendah daripada pasien negatif. Jadi, kami akan menggunakan plot untuk membandingkan tingkat depresi ST dan penyakit jantung.

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

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

plt.title(“Tingkat depresi ST vs. Penyakit Jantung”, ukuran font=20)

plt.xlabel(“Target Penyakit Jantung”, ukuran font=16)

plt.ylabel(“Depresi ST yang disebabkan oleh olahraga relatif terhadap istirahat”, ukuran font=16)

Di sini, pasien positif memiliki median tingkat depresi ST yang lebih tinggi dibandingkan dengan pasien negatif.

Memfilter Data

Sekarang kita akan menyaring data menurut pasien penyakit jantung positif dan negatif. Kami akan mulai dengan memfilter data berdasarkan pasien penyakit jantung positif:

pos_data = data[data['target']==1]

pos_data.deskripsi()

Demikian pula, kami akan memfilter data menurut pasien penyakit jantung negatif:

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

pos_data.deskripsi()

Langkah #3: Menggunakan Algoritma Pembelajaran Mesin

Persiapan

Di sini, kami akan menyiapkan data untuk pelatihan dengan menetapkan fitur ke X dan kolom terakhir ke prediktor Y:

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

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

Kemudian, kami akan membagi data menjadi dua set, set pelatihan dan set pengujian:

dari sklearn.model_selection impor train_test_split

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

Terakhir, kita akan menormalkan data sehingga distribusinya akan memiliki rata-rata 0:

dari sklearn.preprocessing impor StandardScaler

sc = StandardScaler()

x_train = sc.fit_transform(x_train)

x_test = sc.transform(x_test)

Melatih Model

Di bagian ini, kita akan menggunakan beberapa algoritme pembelajaran mesin dan menemukan yang menawarkan akurasi tertinggi:

Model 1: Regresi Logistik

dari sklearn.metrics mengimpor klasifikasi_laporan

dari sklearn.linear_model impor LogisticRegression

model1 = LogisticRegression(random_state=1) # dapatkan contoh model

model1.fit(x_train, y_train) # Model Kereta/Fit

y_pred1 = model1.predict(x_test) # dapatkan prediksi y

print(classification_report(y_test, y_pred1)) # akurasi keluaran

Akurasi model ini adalah 74%.

Model ke-2: K-NN (K-Tetangga Terdekat)

dari sklearn.metrics mengimpor klasifikasi_laporan

dari sklearn.neighbours impor KNeighboursClassifier

model2 = KNeighboursClassifier() # dapatkan contoh model

model2.fit(x_train, y_train) # Model Kereta/Fit

y_pred2 = model2.predict(x_test) # dapatkan prediksi y

print(classification_report(y_test, y_pred2)) # akurasi keluaran

Akurasi model ini adalah 75%.

Model Ketiga: Mendukung Mesin Vektor (SVM)

dari sklearn.metrics mengimpor klasifikasi_laporan

dari sklearn.svm impor SVC

model3 = SVC(random_state=1) # dapatkan contoh model

model3.fit(x_train, y_train) # Model Kereta/Fit

y_pred3 = model3.predict(x_test) # dapatkan prediksi y

print(classification_report(y_test, y_pred3)) # akurasi keluaran

Akurasi model ini adalah 75%.

Model ke-4: Pengklasifikasi Naive Bayes

dari sklearn.metrics mengimpor klasifikasi_laporan

dari sklearn.naive_bayes impor GaussianNB

model4 = GaussianNB() # dapatkan contoh model

model4.fit(x_train, y_train) # Model Kereta/Fit

y_pred4 = model4.predict(x_test) # dapatkan prediksi y

print(classification_report(y_test, y_pred4)) # akurasi keluaran

Akurasi model ini adalah 77%.

Model ke-5: Hutan Acak

dari sklearn.metrics mengimpor klasifikasi_laporan

dari sklearn.ensemble impor RandomForestClassifier

model6 = RandomForestClassifier(random_state=1)# dapatkan contoh model

model6.fit(x_train, y_train) # Model Kereta/Fit

y_pred6 = model6.predict(x_test) # dapatkan prediksi y

print(classification_report(y_test, y_pred6)) # akurasi keluaran

Model ini memiliki akurasi tertinggi yaitu 80%.

Model ke-6: XGBoost

dari xgboost impor XGBClassifier

model7 = XGBClassifier(random_state=1)

model7.fit(x_train, y_train)

y_pred7 = model7.predict(x_test)

print(laporan_klasifikasi(y_test, y_pred7))

Akurasi model ini adalah 69%.

Setelah menguji berbagai algoritme ML, kami menemukan bahwa yang terbaik adalah Random Forest karena memberikan kami akurasi optimal sebesar 80%.

Ingatlah bahwa persentase akurasi yang lebih tinggi dari 80% terlalu bagus untuk menjadi kenyataan, dan itu mungkin karena overfitting. Itu sebabnya 80% adalah angka optimal untuk dicapai.

Langkah #4: Menemukan Skor Fitur

Di sini, kami akan menemukan Skor Fitur, yang membantu kami membuat keputusan penting dengan memberi tahu kami fitur mana yang paling berguna untuk model kami:

#mendapatkan kepentingan

pentingnya = model6.feature_importances_

# meringkas pentingnya fitur

untuk i,v di enumerate(penting):

print('Fitur: %0d, Skor: %.5f' % (i,v))

Kami menemukan bahwa empat fitur teratas adalah jenis nyeri dada (cp), detak jantung maksimum yang dicapai (thalach), jumlah pembuluh darah utama (ca) dan depresi ST yang disebabkan oleh olahraga relatif terhadap istirahat (oldpeak).

Kesimpulan

Selamat, Anda sekarang telah berhasil menyelesaikan proyek prediksi penyakit jantung. Kami memiliki 13 fitur, di mana kami menemukan bahwa yang paling penting adalah jenis nyeri dada dan detak jantung maksimum yang dicapai.

Kami menguji enam algoritma ML yang berbeda dan menemukan bahwa algoritma yang paling akurat adalah Random Forest. Anda harus menguji model ini dengan set pengujian dan melihat seberapa baik model ini bekerja.

Di sisi lain, jika Anda ingin mempelajari lebih lanjut tentang pembelajaran mesin dan AI, kami sarankan untuk memeriksa kursus AI kami . Anda akan belajar langsung dari pakar industri dan mengerjakan proyek industri yang memungkinkan Anda menguji pengetahuan Anda. Periksa mereka jika Anda tertarik berkarir dalam pembelajaran mesin dan AI.

Jika Anda tertarik untuk mempelajari lebih lanjut tentang pembelajaran mesin, lihat Program PG Eksekutif IIIT-B & upGrad dalam Pembelajaran Mesin & AI yang dirancang untuk para profesional yang bekerja dan menawarkan 450+ jam pelatihan ketat, 30+ studi kasus & tugas, IIIT -B Status Alumni, 5+ proyek batu penjuru praktis & bantuan pekerjaan dengan perusahaan-perusahaan top.

Bagaimana pembelajaran mesin membantu sektor perawatan kesehatan?

Ada banyak kegunaan pembelajaran mesin yang menarik di sektor kesehatan saat ini. Dari semua, salah satu kegunaan utamanya adalah untuk deteksi dan diagnosis penyakit. Mulai dari mendeteksi penyakit genetik langka hingga kanker stadium awal, pembelajaran mesin telah terbukti sangat membantu dalam hal ini. Ada banyak kegunaan lain, seperti menemukan obat, diagnosis pencitraan, memelihara catatan kesehatan yang cerdas, pengobatan pencegahan seperti modifikasi perilaku, memprediksi wabah dan kekambuhan penyakit, meningkatkan radioterapi, penelitian klinis yang efisien dan uji coba pasien, dan banyak lagi.

Bagaimana saya bisa menjadi ilmuwan data kesehatan?

Mengingat bahwa industri perawatan kesehatan adalah salah satu sumber data terbesar di dunia, permintaan akan ilmuwan data perawatan kesehatan diperkirakan akan meningkat. Penggabungan perawatan kesehatan dan ilmu data adalah jalan yang menjanjikan dan bermanfaat, dan calon ilmuwan data kesehatan dapat memanfaatkan situasi ini. Ilmu data kesehatan adalah bidang yang relatif baru; itu adalah campuran statistik, matematika, bioinformatika, ilmu komputer, dan epidemiologi. Dasar dan keahlian untuk menjadi ilmuwan data adalah sama, tetapi fokus Anda hanya pada data dan aplikasi perawatan kesehatan. Pengetahuan tentang pemrograman komputer menggunakan Python, R, dan SAS akan sangat membantu. Universitas global terkemuka menawarkan program pascasarjana khusus dalam ilmu data kesehatan.

Apakah dokter perlu mengetahui ilmu data?

Dengan AI dan ilmu data yang dengan cepat mendapatkan entri arus utama, ini lebih dari sekadar kata kunci di sektor perawatan kesehatan. Signifikansi besar dari teknologi ini dalam mengekstraksi informasi yang berguna secara klinis dari kumpulan data yang sangat besar mendorong dokter dan dokter untuk mengambil minat baru dalam bidang ini. Mengetahui ilmu data menawarkan keuntungan tambahan bagi dokter karena mereka dapat dengan cepat dan akurat mendiagnosis penyakit langka menggunakan informasi multi-parameter dan kumpulan data besar yang diperoleh dari pemantauan berkelanjutan. AI membantu diagnosis melalui teknik visualisasi data yang efektif dan membantu mereka menghargai pentingnya statistik studi klinis.