2022'de En İyi Kalp Hastalığı Tahmin Projesi
Yayınlanan: 2021-05-26Kalp hastalığı tahmin projemizin bu adım adım öğreticisine hoş geldiniz. Burada, bir hastaya kalp hastalığı teşhisi konup konulamayacağını tahmin eden bir makine öğrenimi modeli oluşturacaksınız.
Bu projede çalışmak için makine öğrenimi ve veri analizinin temellerine aşina olmalısınız. Bu proje, Random Forest, K-NN (K-en yakın komşu) ve diğerleri dahil olmak üzere birden çok ML algoritmasına aşina olmanızı gerektirir.
Hangisinin veri kümemiz için en uygun sonuçları sunduğunu bulmak için veri karıştırma, filtreleme ve altı farklı ML algoritmasını test edeceğiz. Hadi başlayalım:
İçindekiler
Kalp Hastalığı Tahmin Projesinin Amacı
Kalp hastalığı tahmin projemizin amacı, bir hastaya kalp hastalığı teşhisi konmasının gerekip gerekmediğini belirlemektir ki bu ikili bir sonuçtur:
Pozitif sonuç = 1, hastaya kalp hastalığı teşhisi konur.
Negatif sonuç = 0, hastaya kalp hastalığı teşhisi konulmayacaktır .
Hangi sınıflandırma modelinin en yüksek doğruluğa sahip olduğunu bulmalı ve verilerimizdeki korelasyonları belirlemeliyiz. Son olarak, kalp hastalığı tanımızda hangi özelliklerin en etkili olduğunu da belirlememiz gerekiyor.
Özellikler
Tahmin edicimizi (Y) belirlemek için aşağıdaki 13 özelliği (X) kullanırız:
- Yaş.
- Cinsiyet: 1 = Erkek, 0 = Kadın.
- (cp) göğüs ağrısı tipi (4 değer – Sıralı), 1. değer: tipik angina, 2. değer: atipik angina, 3. değer: anjinal olmayan ağrı, 4. değer: asemptomatik.
- (trestbps) dinlenme kan basıncı.
- (kol) serum kolesterolü.
- (Fbs) – açlık kan şekeri > 120 mg/dl.
- (restecg) – dinlenme elektrokardiyografi sonuçları.
- (thalach) – ulaşılan maksimum kalp atış hızı.
- (exang) – egzersize bağlı angina.
- (eski tepe) – dinlenmeye göre egzersizin neden olduğu ST depresyonu.
- (eğim) – zirve egzersiz ST segmentinin eğimi.
- (ca) – floroskopi ile renklendirilen büyük damarların sayısı.
- (thal) – ulaşılan maksimum kalp hızı (Sıralı), 3 = normal, 6 = sabit kusur, 7 = geri döndürülebilir kusur.
1. Adım: Verilerin Tartışılması
Önce birlikte çalıştığımız veri setini daha basit ve daha anlaşılır bir formata dönüştürerek inceleyeceğiz. Verileri daha uygun şekilde kullanmamıza yardımcı olur.
numpy'yi np olarak içe aktar
pandaları pd olarak içe aktar
matplotlib'i plt olarak içe aktar
seaborn'u sns olarak içe aktar
matplotlib.pyplot'u plt olarak içe aktar
filePath = '/Users/upgrad/Downloads/datasets-33180-43520-heart.csv'
veri = pd.read_csv(dosyayolu)
veri.kafa(5)
yaş | seks | cp | trestbps | çikolata | yeniden | talak | exang | eski tepe | eğim | CA | tal | hedef | ||
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 |
Yukarıdaki kodun verilerimizi tablo şeklinde göstermemize yardımcı olduğu gibi, daha fazla veri tartışması için aşağıdaki kodu kullanacağız:
print(“(Satırlar, sütunlar): ” + str(veri.şekil))
data.columns
Yukarıdaki kod, veri kümemizdeki toplam satır ve sütun sayısını ve sütun adlarını gösterecektir. Verilerimizdeki toplam satır ve sütun sayısı sırasıyla 303 ve 14'tür. Şimdi aşağıdaki fonksiyonu kullanarak her değişken için benzersiz değerlerin sayısını bulacağız:
data.nunique(eksen=0
Benzer şekilde, aşağıdaki fonksiyon sayısal değişkenler için ortalama, sayı, standart sapma, minimum ve maksimumu özetler:
data.describe()
Adım #2: EDA'nın Yürütülmesi
Veri tartışmasını tamamladığımıza göre artık keşifsel veri analizi yapabiliriz. Kalp hastalığı tahmin projemizin bu aşamasında gerçekleştireceğimiz başlıca görevler şunlardır:
Korelasyon Bulma
Farklı değişkenler arasındaki korelasyonları görmemize yardımcı olan bir korelasyon matrisi oluşturacağız:
düzeltme = veri.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(düzeltme, xticklabels=düzeltme.sütunlar,
yticklabels=corr.columns,
açıklama=Doğru,
cmap=sns.diverging_palette(220, 20, as_cmap=Doğru))
Özellikler arasında doğrudan korelasyonları bulmak için çiftler de oluşturabiliriz. İlişkilere daha derinlemesine bakmak için yalnızca sürekli değişkenlerle küçük çiftler kullanacağız:
subData = data[['age','trestbps','chol','thalach','oldpeak']]
sns.pairplot(altVeri)
Keman ve Kutu Grafiklerini Kullanma
Keman ve Kutu grafikleri ile verilerimizin temel istatistiklerini ve dağılımını görebiliriz. Belirli bir değişkenin farklı kategorilerdeki dağılımını karşılaştırmak için kullanabilirsiniz. Verilerdeki aykırı değerleri de belirlememize yardımcı olacaktır. Aşağıdaki kodu kullanın:
plt.şekil(şekil=(12,8))
sns.violinplot(x= 'hedef', y= 'eski tepe',hue=”seks”, iç='çeyrek',veri=veri)
plt.title(“Thalach Düzeyine Karşı Kalp Hastalığı”,fontsize=20)
plt.xlabel(“Kalp Hastalığı Hedefi”, yazı tipi boyutu=16)
plt.ylabel(“Thalach Düzeyi”, yazı tipi boyutu=16)
İlk Keman ve Kutu grafiğinde, pozitif hastaların ST depresyonu için negatif hastalara göre daha düşük bir medyana sahip olduğunu bulduk. Bu nedenle, ST depresyon düzeyi ile kalp hastalığını karşılaştırmak için bir plan kullanacağız.
plt.şekil(şekil=(12,8))
sns.boxplot(x= 'hedef', y= 'thalach',hue=”seks”, veri=veri )
plt.title(“ST Depresyon Düzeyine Karşı Kalp Hastalığı”, fontsize=20)
plt.xlabel(“Kalp Hastalığı Hedefi”,fontsize=16)
plt.ylabel(“Dinlenmeye göre egzersizin neden olduğu ST depresyonu”, fontsize=16)
Burada pozitif hastaların ST depresyon düzeyi için medyanı negatif hastalara göre daha yüksekti.
Verileri Filtreleme
Şimdi verileri pozitif ve negatif kalp hastalığı olan hastalara göre filtreleyeceğiz. Pozitif kalp hastalığı hastalarına göre filtreleme verileriyle başlayacağız:
pos_data = veri[veri['hedef']==1]
pos_data.describe()
Benzer şekilde, verileri negatif kalp hastalığı olan hastalara göre filtreleyeceğiz:
pos_data = veri[veri['hedef']==0]
pos_data.describe()
Adım #3: Makine Öğrenimi Algoritmalarını Kullanma
Hazırlık
Burada, özellikleri X'e ve son sütunu Y yordayıcısına atayarak verileri eğitim için hazırlayacağız:
X = data.iloc[:, :-1].değerler
Y = data.iloc[:, -1}.değerler
Ardından verileri eğitim seti ve test seti olmak üzere iki gruba ayıracağız:
sklearn.model_selection'dan train_test_split'i içe aktarın
x_train, x_test, y_train, y_test = train_test_split(X,y,test_size = 0.2, random_state = 1)
Son olarak, dağılımı ortalama 0 olacak şekilde verileri normalleştireceğiz:
sklearn.preprocessing'den içe aktarma StandardScaler
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)
Modelin Eğitimi
Bu bölümde, birden çok makine öğrenimi algoritması kullanacağız ve en yüksek doğruluğu sunanı bulacağız:
1. Model: Lojistik Regresyon
sklearn.metrics'den sınıflandırma_reportunu içe aktar
sklearn.linear_model'den LogisticRegression'ı içe aktarın
model1 = LogisticRegression(random_state=1) # modelin örneğini al
model1.fit(x_train, y_train) # Modeli Eğit/Sığdır
y_pred1 = model1.predict(x_test) # y tahminini al
print(classification_report(y_test, y_pred1)) # çıktı doğruluğu
Bu modelin doğruluğu %74 idi.
2. Model: K-NN (K-En Yakın Komşular)
sklearn.metrics'den sınıflandırma_reportunu içe aktar
sklearn.neighbours'dan KNeighboursClassifier'ı içe aktar
model2 = KNeighboursClassifier() # model örneğini al
model2.fit(x_train, y_train) # Modeli Eğit/Sığdır
y_pred2 = model2.predict(x_test) # y tahminini al
print(classification_report(y_test, y_pred2)) # çıktı doğruluğu
Bu modelin doğruluğu %75 idi.
3. Model: Destek Vektör Makinesi (SVM)
sklearn.metrics'den sınıflandırma_reportunu içe aktar
sklearn.svm'den SVC'yi içe aktar
model3 = SVC(random_state=1) # modelin örneğini al
model3.fit(x_train, y_train) # Modeli Eğit/Sığdır
y_pred3 = model3.predict(x_test) # y tahminini al
print(classification_report(y_test, y_pred3)) # çıktı doğruluğu
Bu modelin doğruluğu %75 idi.
4. Model: Naive Bayes Sınıflandırıcısı
sklearn.metrics'den sınıflandırma_reportunu içe aktar
sklearn.naive_bayes'den GaussianNB'yi içe aktarın
model4 = GaussianNB() # modelin örneğini al
model4.fit(x_train, y_train) # Train/Fit modeli
y_pred4 = model4.predict(x_test) # y tahminini al
print(classification_report(y_test, y_pred4)) # çıktı doğruluğu
Bu modelin doğruluğu %77 idi.
5. Model: Rastgele Orman
sklearn.metrics'den sınıflandırma_reportunu içe aktar
sklearn.ensemble'dan RandomForestClassifier'ı içe aktarın
model6 = RandomForestClassifier(random_state=1)# modelin örneğini al
model6.fit(x_train, y_train) # Modeli Eğit/Sığdır
y_pred6 = model6.predict(x_test) # y tahminini al
print(classification_report(y_test, y_pred6)) # çıktı doğruluğu
Bu model %80 ile en yüksek doğruluğa sahipti.
6. Model: XGBoost
xgboost'tan içe aktarma XGBClassifier
model7 = XGBClassifier(random_state=1)
model7.fit(x_tren, y_tren)
y_pred7 = model7.predict(x_test)
yazdır(sınıflandırma_raporu(y_test, y_pred7))
Bu modelin doğruluğu %69 idi.
Farklı ML algoritmalarını test ettikten sonra, en iyisinin Rastgele Orman olduğunu bulduk çünkü bize en uygun doğruluğu %80 verdi.
%80'den yüksek herhangi bir doğruluk yüzdesinin gerçek olamayacak kadar iyi olduğunu ve bunun nedeninin fazla uydurma olabileceğini unutmayın. Bu yüzden ulaşılması en uygun sayı %80'dir.
4. Adım: Özellik Puanını Bulma
Burada, modelimiz için hangi özelliğin en yararlı olduğunu bize bildirerek önemli kararlar vermemize yardımcı olan Özellik Puanını bulacağız:
# önem kazan
önem = model6.feature_importances_
# özelliğin önemini özetle
numaralandırmada i,v için (önem):
print('Özellik: %0d, Puan: %.5f' % (i,v))
İlk dört özelliğin göğüs ağrısı tipi (cp), ulaşılan maksimum kalp hızı (talak), ana damar sayısı (ca) ve dinlenmeye göre egzersizin neden olduğu ST depresyonu (eski tepe) olduğunu bulduk.
Çözüm
Tebrikler, artık kalp hastalığı tahmin projesini başarıyla tamamladınız. 13 özelliğimiz vardı ve bunlardan en önemlilerinin göğüs ağrısı tipi ve ulaşılan maksimum kalp hızı olduğunu bulduk.
Altı farklı ML algoritmasını test ettik ve en doğru algoritmanın Random Forest olduğunu bulduk. Bu modeli test seti ile test etmeli ve bu modelin ne kadar işe yaradığını görmelisiniz.
Öte yandan, makine öğrenimi ve yapay zeka hakkında daha fazla bilgi edinmek istiyorsanız yapay zeka kurslarımıza göz atmanızı öneririz . Doğrudan endüstri uzmanlarından eğitim alacak ve bilginizi test etmenize izin veren endüstri projeleri üzerinde çalışacaksınız. Makine öğrenimi ve AI alanında bir kariyerle ilgileniyorsanız, bunları kontrol edin.
Makine öğrenimi hakkında daha fazla bilgi edinmek istiyorsanız, çalışan profesyoneller için tasarlanmış ve 450+ saat zorlu eğitim, 30'dan fazla vaka çalışması ve ödev, IIIT sunan IIIT-B & upGrad'ın Makine Öğrenimi ve Yapay Zeka alanında Yönetici PG Programına göz atın. -B Mezunu statüsü, 5'ten fazla pratik uygulamalı bitirme projesi ve en iyi firmalarla iş yardımı.
Makine öğrenimi sağlık sektörüne nasıl yardımcı oluyor?
Bugün sağlık sektöründe makine öğreniminin birçok ilginç kullanımı var. Hepsinden öte, birincil kullanımlarından biri hastalıkların tespiti ve teşhisi içindir. Nadir görülen genetik rahatsızlıkları tespit etmekten kanserin erken evrelerine kadar makine öğreniminin bu konuda çok yardımcı olduğu kanıtlandı. İlaçları keşfetme, tanı görüntüleme, akıllı sağlık kayıtlarını tutma, davranış değişikliği gibi önleyici tıp, hastalık salgınlarını ve tekrarlamalarını tahmin etme, radyoterapiyi iyileştirme, verimli klinik araştırma ve hasta denemeleri ve daha fazlası gibi birçok başka kullanım vardır.
Nasıl bir sağlık veri bilimcisi olabilirim?
Sağlık sektörünün dünyadaki en büyük veri kaynaklarından biri olduğu düşünüldüğünde, sağlık veri bilimcilerine olan talebin artması bekleniyor. Sağlık hizmetleri ve veri biliminin birleşmesi umut verici ve verimli bir yoldur ve gelecek vadeden sağlık veri bilimcileri bu durumdan yararlanabilir. Sağlık veri bilimi nispeten yeni bir alandır; istatistik, matematik, biyoinformatik, bilgisayar bilimi ve epidemiyolojinin bir karışımıdır. Veri bilimcisi olmak için temel ve beceri seti aynıdır, ancak odak noktanız yalnızca sağlık verileri ve uygulamaları olacaktır. Python, R ve SAS kullanarak bilgisayar programlama bilgisi yardımcı olacaktır. Dünyanın önde gelen üniversiteleri, sağlık veri biliminde uzmanlaşmış lisansüstü programlar sunar.
Doktorların veri bilimini bilmesi gerekiyor mu?
Yapay zeka ve veri biliminin hızla ana akım girişi kazanmasıyla, bunlar sağlık sektöründeki moda sözcüklerden daha fazlasıdır. Bu teknolojilerin çok büyük veri kümelerinden klinik olarak faydalı bilgiler elde etmedeki muazzam önemi, doktorları ve hekimleri bu alanlara yeniden ilgi duymaya teşvik ediyor. Veri bilimini bilmek, çok parametreli bilgileri ve sürekli izlemeden elde edilen devasa veri kümelerini kullanarak nadir hastalıkları hızlı ve doğru bir şekilde teşhis edebildikleri için doktorlara ek bir avantaj sunar. AI, etkili veri görselleştirme teknikleri aracılığıyla tanıya yardımcı olur ve klinik çalışmaların istatistiksel önemini anlamalarına yardımcı olur.