2022'de En İyi Kalp Hastalığı Tahmin Projesi

Yayınlanan: 2021-05-26

Kalp 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:

  1. Yaş.
  2. Cinsiyet: 1 = Erkek, 0 = Kadın.
  3. (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.
  4. (trestbps) dinlenme kan basıncı.
  5. (kol) serum kolesterolü.
  6. (Fbs) – açlık kan şekeri > 120 mg/dl.
  7. (restecg) – dinlenme elektrokardiyografi sonuçları.
  8. (thalach) – ulaşılan maksimum kalp atış hızı.
  9. (exang) – egzersize bağlı angina.
  10. (eski tepe) – dinlenmeye göre egzersizin neden olduğu ST depresyonu.
  11. (eğim) – zirve egzersiz ST segmentinin eğimi.
  12. (ca) – floroskopi ile renklendirilen büyük damarların sayısı.
  13. (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 Facebook 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.