Proyek Prediksi Penyakit Jantung Teratas Tahun 2022
Diterbitkan: 2021-05-26Selamat 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):
- Usia.
- Jenis Kelamin: 1 = Pria, 0 = Wanita.
- (cp) jenis nyeri dada (4 nilai – Ordinal), nilai pertama: angina tipikal, nilai kedua: angina atipikal, nilai ketiga: nyeri non-angina, nilai keempat: asimtomatik.
- (trestbps) tekanan darah istirahat.
- (kol) kolesterol serum.
- (Fbs) – gula darah puasa > 120 mg/dl.
- (restecg) – hasil elektrokardiografi istirahat.
- (thalach) – detak jantung maksimum tercapai.
- (exang) – angina yang diinduksi oleh olahraga.
- (oldpeak) - ST depresi yang disebabkan oleh olahraga relatif terhadap istirahat.
- (kemiringan) – kemiringan segmen ST latihan puncak.
- (ca) – jumlah pembuluh darah utama yang diwarnai dengan fluoroskopi.
- (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.