مشروع التنبؤ بأمراض القلب في عام 2022

نشرت: 2021-05-26

مرحبًا بكم في هذا البرنامج التعليمي خطوة بخطوة لمشروع التنبؤ بأمراض القلب. هنا ، ستنشئ نموذجًا للتعلم الآلي يتنبأ بما إذا كان يمكن تشخيص المريض بأمراض القلب أم لا.

يجب أن تكون على دراية بأساسيات التعلم الآلي وتحليل البيانات للعمل في هذا المشروع. يتطلب هذا المشروع أن تكون على دراية بخوارزميات ML المتعددة ، بما في ذلك Random Forest و K-NN (K- الجار الأقرب) والعديد من الخوارزميات الأخرى.

سنقوم بإجراء مناقشة للبيانات وتصفية واختبار ستة خوارزميات مختلفة لتعلم الآلة للعثور على أي منها يقدم أفضل النتائج لمجموعة البيانات الخاصة بنا. هيا نبدأ:

جدول المحتويات

الهدف من مشروع التنبؤ بأمراض القلب

الهدف من مشروعنا للتنبؤ بأمراض القلب هو تحديد ما إذا كان يجب تشخيص المريض بمرض القلب أم لا ، وهي نتيجة ثنائية ، لذلك:

النتيجة الإيجابية = 1 يتم تشخيص حالة المريض بأمراض القلب.

النتيجة السلبية = 0 لن يتم تشخيص المريض بأمراض القلب.

علينا أن نجد نموذج التصنيف الذي يتمتع بأكبر قدر من الدقة وتحديد الارتباطات في بياناتنا. أخيرًا ، يتعين علينا أيضًا تحديد الميزات الأكثر تأثيرًا في تشخيص أمراض القلب لدينا.

سمات

نستخدم الميزات الـ 13 التالية (X) لتحديد المتنبئ (Y):

  1. سن.
  2. الجنس: 1 = ذكر ، 0 = أنثى.
  3. (cp) نوع ألم الصدر (4 قيم - ترتيبي) ، القيمة الأولى: الذبحة الصدرية النموذجية ، القيمة الثانية: الذبحة الصدرية غير النمطية ، القيمة الثالثة: الألم غير الذكري ، القيمة الرابعة: بدون أعراض.
  4. (trestbps) يستريح ضغط الدم.
  5. (الكوليسترول) مصل الكوليسترول.
  6. (FBS) - سكر الدم الصائم> 120 مجم / ديسيلتر.
  7. (restecg) - الراحة نتائج تخطيط القلب.
  8. (ثالاخ) - تحقيق أقصى معدل لضربات القلب.
  9. (exang) - الذبحة الصدرية الناتجة عن التمرين.
  10. (oldpeak) - اكتئاب ST الناجم عن ممارسة الرياضة نسبة إلى الراحة.
  11. (المنحدر) - منحدر الجزء ST من تمرين الذروة.
  12. (كاليفورنيا) - عدد الأوعية الرئيسية الملونة بواسطة التنظير التألقي.
  13. (thal) - أقصى معدل لضربات القلب (ترتيبي) ، 3 = طبيعي ، 6 = عيب ثابت ، 7 = عيب قابل للعكس.

الخطوة رقم 1: مشاحنات البيانات

سننظر أولاً في مجموعة البيانات التي نعمل معها من خلال تحويلها إلى تنسيق أبسط وأكثر قابلية للفهم. سيساعدنا على استخدام البيانات بشكل أكثر ملاءمة.

استيراد numpy كـ np

استيراد الباندا كما pd

استيراد matplotlib كـ PLT

استيراد seaborn as sns

استيراد matplotlib.pyplot كـ PLT

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

البيانات = pd.read_csv (مسار الملف)

داتا.هيد (5)

سن الجنس cp trestbps كول fbs ريستيك ثالاخ exang oldpeak ميل كاليفورنيا ثال استهداف
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

مثلما ساعدنا الكود أعلاه في عرض بياناتنا في شكل جدولي ، سنستخدم الكود التالي لمزيد من الخلافات حول البيانات:

طباعة ("(صفوف ، أعمدة):" + str (data.shape))

البيانات

سيُظهر الرمز أعلاه العدد الإجمالي للصفوف والأعمدة وأسماء الأعمدة في مجموعة البيانات الخاصة بنا. إجمالي عدد الصفوف والأعمدة في بياناتنا هو 303 و 14 على التوالي. سنجد الآن عدد القيم الفريدة لكل متغير باستخدام الوظيفة التالية:

بيانات فريدة (المحور = 0

وبالمثل ، تلخص الوظيفة التالية المتوسط ​​، العدد ، الانحراف المعياري ، الحد الأدنى والحد الأقصى للمتغيرات الرقمية:

data.describe () وصف

الخطوة رقم 2: إجراء EDA

الآن وقد أكملنا جدل البيانات ، يمكننا إجراء تحليل استكشافي للبيانات. فيما يلي المهام الأساسية التي سنقوم بها في هذه المرحلة من مشروع التنبؤ بأمراض القلب:

إيجاد الارتباطات

سننشئ مصفوفة ارتباط تساعدنا في رؤية الارتباطات بين المتغيرات المختلفة:

corr = data.corr ()

plt.subplots (حجم التين = (15،10))

sns.heatmap (corr، xticklabels = corr.columns، yticklabels = corr.columns، التعليق التوضيحي = صحيح، cmap = sns.diverging_palette (220، 20، as_cmap = صحيح))

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

yticklabels = corr.columns ،

التعليقات التوضيحية = صحيح ،

cmap = sns.diverging_palette (220 ، 20 ، as_cmap = صحيح))

للعثور على ارتباطات فورية بين الميزات ، يمكننا أيضًا إنشاء حبكات زوجية. سنستخدم حبكات صغيرة مع المتغيرات المستمرة فقط للنظر بشكل أعمق في العلاقات:

subData = البيانات [['age'، 'trestbps'، 'chol'، 'thalach'، 'oldpeak']]

sns.pairplot (بيانات فرعية)

باستخدام مؤامرات الكمان والبوكس

باستخدام مؤامرات الكمان والبوكس ، يمكننا رؤية الإحصائيات الأساسية وتوزيع بياناتنا. يمكنك استخدامه لمقارنة توزيع متغير معين عبر فئات مختلفة. سيساعدنا ذلك في تحديد القيم المتطرفة في البيانات أيضًا. استخدم الكود التالي:

شكل plt (حجم التين = (12،8))

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

plt.title ("مستوى ثالاخ مقابل أمراض القلب" ، حجم الخطوط = 20)

plt.xlabel ("هدف مرض القلب" ، حجم الخطوط = 16)

plt.ylabel ("مستوى ثالاخ" ، حجم الخطوط = 16)

في الرسم البياني الأول للكمان والصندوق ، وجدنا أن المرضى الإيجابيين لديهم متوسط ​​أقل لاكتئاب ST من المرضى السلبيين. لذلك ، سنستخدم حبكة لمقارنة مستوى الاكتئاب ST وأمراض القلب.

شكل plt (حجم التين = (12،8))

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

plt.title ("مستوى الاكتئاب ST مقابل أمراض القلب" ، حجم الخطوط = 20)

plt.xlabel ("هدف مرض القلب" ، حجم الخطوط = 16)

plt.ylabel ("اكتئاب ST الناجم عن التمرين بالنسبة للراحة" ، حجم الخطوط = 16)

هنا ، كان لدى المرضى الإيجابيين متوسط ​​أعلى لمستوى اكتئاب ST مقارنة بالمرضى السلبيين.

تصفية البيانات

سنقوم الآن بتصفية البيانات وفقًا لمرضى القلب الموجبين والسلبيين. سنبدأ بتصفية البيانات حسب مرضى القلب الإيجابي:

pos_data = البيانات [البيانات ['الهدف'] == 1]

pos_data.describe ()

وبالمثل ، سنقوم بتصفية البيانات وفقًا لمرضى القلب السلبيين:

pos_data = البيانات [البيانات ['الهدف'] == 0]

pos_data.describe ()

الخطوة # 3: استخدام خوارزميات التعلم الآلي

تحضير

هنا ، سنقوم بإعداد البيانات للتدريب عن طريق تعيين الميزات إلى X والعمود الأخير إلى المتنبئ Y:

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

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

بعد ذلك ، سنقسم البيانات إلى مجموعتين ، مجموعة التدريب ومجموعة الاختبار:

من sklearn.model_selection استيراد train_test_split

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

أخيرًا ، سنعمل على تطبيع البيانات بحيث يكون لتوزيعها متوسط ​​0:

من sklearn.preprocessing استيراد StandardScaler

sc = StandardScaler ()

x_train = sc.fit_transform (x_train)

x_test = sc.transform (x_test)

تدريب النموذج

في هذا القسم ، سنستخدم خوارزميات متعددة للتعلم الآلي ونعثر على الخوارزمية التي توفر أعلى دقة:

النموذج الأول: الانحدار اللوجستي

من sklearn.metrics استيراد تصنيف_تقرير

من sklearn.linear_model استيراد LogisticRegression

model1 = LogisticRegression (random_state = 1) # الحصول على مثيل للنموذج

model1.fit (x_train، y_train) # Train / Fit model

y_pred1 = model1.predict (x_test) # الحصول على تنبؤات y

print (category_report (y_test، y_pred1)) # دقة الإخراج

كانت دقة هذا النموذج 74٪.

النموذج الثاني: K-NN (K- أقرب الجيران)

من sklearn.metrics استيراد تصنيف_تقرير

من sklearn.neighbours استيراد KNeighboursClassifier

model2 = KNeighboursClassifier () # الحصول على مثيل للنموذج

model2.fit (x_train، y_train) # Train / Fit model

y_pred2 = model2.predict (x_test) # احصل على تنبؤات y

print (category_report (y_test، y_pred2)) # دقة الإخراج

كانت دقة هذا النموذج 75٪.

النموذج الثالث: دعم آلة المتجهات (SVM)

من sklearn.metrics استيراد تصنيف_تقرير

من sklearn.svm استيراد SVC

model3 = SVC (random_state = 1) # الحصول على مثيل للنموذج

model3.fit (x_train، y_train) # Train / Fit model

y_pred3 = model3.predict (x_test) # احصل على تنبؤات y

print (category_report (y_test، y_pred3)) # دقة الإخراج

كانت دقة هذا النموذج 75٪.

النموذج الرابع: مصنف بايز ساذج

من sklearn.metrics استيراد تصنيف_تقرير

من sklearn.naive_bayes استيراد GaussianNB

model4 = GaussianNB () # الحصول على مثيل للنموذج

model4.fit (x_train، y_train) # Train / Fit model

y_pred4 = model4.predict (x_test) # الحصول على تنبؤات y

print (category_report (y_test، y_pred4)) # دقة الإخراج

كانت دقة هذا النموذج 77٪.

النموذج الخامس: Random Forest

من sklearn.metrics استيراد تصنيف_تقرير

من sklearn.ensemble استيراد RandomForestClassifier

model6 = RandomForestClassifier (random_state = 1) # الحصول على مثيل للنموذج

model6.fit (x_train، y_train) # Train / Fit model

y_pred6 = model6.predict (x_test) # احصل على تنبؤات y

print (category_report (y_test، y_pred6)) # دقة الإخراج

هذا النموذج لديه أعلى دقة 80٪.

النموذج السادس: XGBoost

من xgboost استيراد XGBClassifier

model7 = XGBClassifier (random_state = 1)

model7.fit (x_train، y_train)

y_pred7 = model7.predict (x_test)

طباعة (تصنيف_تقرير (y_test، y_pred7))

كانت دقة هذا النموذج 69٪.

بعد اختبار خوارزميات ML المختلفة ، وجدنا أن أفضلها كان Random Forest حيث أعطانا الدقة المثلى بنسبة 80٪.

ضع في اعتبارك أن أي نسبة دقة أعلى من 80٪ جيدة جدًا لدرجة يصعب تصديقها ، وقد يكون ذلك بسبب التجهيز الزائد. هذا هو السبب في أن 80٪ هو الرقم الأمثل للوصول إليه.

الخطوة رقم 4: البحث عن نتيجة الميزة

هنا ، سنجد نقاط الميزة ، والتي تساعدنا على اتخاذ قرارات مهمة من خلال إخبارنا بالميزة الأكثر فائدة لنموذجنا:

# الحصول على الأهمية

الأهمية = النموذج6.

# تلخيص أهمية الميزة

بالنسبة إلى i ، v في تعداد (الأهمية):

طباعة ('الميزة:٪ 0d ، الدرجة:٪ .5f'٪ (i، v))

وجدنا أن السمات الأربعة الأولى هي نوع ألم الصدر (cp) ، وأقصى معدل لضربات القلب (thalach) ، وعدد الأوعية الرئيسية (كاليفورنيا) ، والاكتئاب ST الناجم عن التمرين بالنسبة للراحة (الذروة القديمة).

خاتمة

تهانينا ، لقد أتممت الآن بنجاح مشروع التنبؤ بأمراض القلب. كان لدينا 13 سمة ، وجدنا أن أهمها نوع ألم الصدر والحد الأقصى لمعدل ضربات القلب.

اختبرنا ستة خوارزميات تعلم مختلفة ووجدنا أن الخوارزمية الأكثر دقة هي Random Forest. يجب عليك اختبار هذا النموذج مع مجموعة الاختبار ومعرفة مدى نجاح هذا النموذج.

من ناحية أخرى ، إذا كنت ترغب في معرفة المزيد عن التعلم الآلي والذكاء الاصطناعي ، فإننا نوصي بالاطلاع على دورات الذكاء الاصطناعي الخاصة بنا . ستدرس مباشرة من خبراء الصناعة وستعمل على مشاريع صناعية تتيح لك اختبار معرفتك. قم بفحصها إذا كنت مهتمًا بمهنة في التعلم الآلي والذكاء الاصطناعي.

إذا كنت مهتمًا بمعرفة المزيد عن التعلم الآلي ، فراجع برنامج IIIT-B & upGrad's Executive PG في التعلم الآلي والذكاء الاصطناعي المصمم للمهنيين العاملين ويقدم أكثر من 450 ساعة من التدريب الصارم ، وأكثر من 30 دراسة حالة ومهمة ، IIIT -ب حالة الخريجين ، 5+ مشاريع التخرج العملية العملية والمساعدة في العمل مع الشركات الكبرى.

كيف يساعد التعلم الآلي قطاع الرعاية الصحية؟

هناك العديد من الاستخدامات المثيرة للاهتمام للتعلم الآلي في قطاع الرعاية الصحية اليوم. من بين كل استخداماته الأساسية ، الكشف عن الأمراض وتشخيصها. بدءًا من اكتشاف الأمراض الوراثية النادرة وحتى المراحل المبكرة من السرطان ، أثبت التعلم الآلي أنه مفيد جدًا في هذا الصدد. هناك العديد من الاستخدامات الأخرى ، مثل اكتشاف الأدوية وتشخيص التصوير والحفاظ على السجلات الصحية الذكية والطب الوقائي مثل تعديل السلوك والتنبؤ بتفشي الأمراض وتكرارها وتحسين العلاج الإشعاعي والبحوث السريرية الفعالة وتجارب المرضى والمزيد.

كيف يمكنني أن أصبح عالم بيانات رعاية صحية؟

نظرًا لأن صناعة الرعاية الصحية هي أحد أكبر مصادر البيانات الضخمة في العالم ، فمن المتوقع أن يزداد الطلب على علماء بيانات الرعاية الصحية. يعد دمج الرعاية الصحية وعلم البيانات مسارًا واعدًا ومثمرًا ، ويمكن لعلماء البيانات الصحية الطموحين الاستفادة من هذا الموقف. علم بيانات الرعاية الصحية هو مجال جديد نسبيًا ؛ إنه مزيج من الإحصاء والرياضيات والمعلوماتية الحيوية وعلوم الكمبيوتر وعلم الأوبئة. الأساس والمهارات اللازمة لتصبح عالم بيانات هي نفسها ، لكن تركيزك سيكون فقط على بيانات وتطبيقات الرعاية الصحية. ستكون معرفة برمجة الكمبيوتر باستخدام Python و R و SAS مفيدة. تقدم أفضل الجامعات العالمية برامج دراسات عليا متخصصة في علوم بيانات الرعاية الصحية.

هل يحتاج الأطباء إلى معرفة علم البيانات؟

مع اكتساب الذكاء الاصطناعي وعلوم البيانات سريعًا الدخول السائد ، فهذه أكثر من مجرد كلمات طنانة في قطاع الرعاية الصحية. إن الأهمية الهائلة لهذه التقنيات في استخراج المعلومات المفيدة سريريًا من مجموعات ضخمة من مجموعات البيانات تشجع الأطباء والأطباء على الاهتمام مجددًا بهذه المجالات. توفر معرفة علم البيانات ميزة إضافية للأطباء حيث يمكنهم تشخيص الأمراض النادرة بسرعة وبدقة باستخدام المعلومات متعددة المعلمات ومجموعات البيانات الضخمة التي تم الحصول عليها من المراقبة المستمرة. يساعد الذكاء الاصطناعي في التشخيص من خلال تقنيات تصور البيانات الفعالة ويساعدهم على تقدير الأهمية الإحصائية للدراسات السريرية.