مشروع عملي في تصنيف مرض السكري باستخدام تعلم الآلة: من الخوارزميات إلى التقييم

Sept. 15, 2024

مقدمة حول خوارزميات تصنيف التعلم الآلي

خوارزميات تصنيف التعلم الآلي تُستخدم لتصنيف أو تسمية البيانات بناءً على الأنماط المكتشفة من خلال التدريب. تلعب هذه الخوارزميات دورًا محوريًا في التطبيقات الحديثة مثل اكتشاف الأمراض، اكتشاف الاحتيال، تصنيف البريد العشوائي، وأنظمة التوصية. الهدف الأساسي من خوارزميات التصنيف هو تعيين تصنيف فئوي (مثل "بريد عشوائي" أو "ليس بريدًا عشوائيًا") لكل نقطة بيانات. يتم تدريب الخوارزميات على بيانات مميزة، ثم يتم استخدامها للتنبؤ بالتصنيفات على بيانات جديدة غير مرئية من قبلتختلف خوارزميات التصنيف في نقاط قوتها، وضعفها، واستخداماتها المثلى. يعتمد اختيار الخوارزمية المناسبة على نوع البيانات، طبيعة المشكلة، والنتائج المرجوة. من بين الخوارزميات الشائعة للتصنيف: الانحدار اللوجستي (Logistic Regression)، شجرة القرار (Decision Tree)، والغابة العشوائية (Random Forest).

الانحدار اللوجستي (Logistic Regression)

على الرغم من الاسم، فإن الانحدار اللوجستي ليس خوارزمية للانحدار بل للتصنيف. يُستخدم في مهام التصنيف الثنائي (أي، حيث يوجد احتمالين للنتيجة). يعمل الانحدار اللوجستي عن طريق نمذجة احتمال حدوث حدث معين (مثل تشخيص مرض) كدالة للميزات المدخلة باستخدام دالة لوجستية (سيغمويد). ثم يتم استخدام حد معين (عادةً 0.5) لتعيين التصنيفات الفئوية (مثل "0" أو "1").

الانحدار اللوجستي مع التنظيم (Regularization)

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

هناك نوعان شائعان من التنظيم:


التنظيم L1: يشجع النموذج على البساطة (بعض المعاملات تصبح صفرًا).


التنظيم L2: يقلل من قيم المعاملات ولكن لا يجعلها صفرًا، مما يشجع على تقليل القيم الكبيرة.

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

 

تقييم المقاييس

لتقييم أداء نماذج التصنيف، يمكن استخدام العديد من المقاييس:

الدقة (Accuracy) هي مقياس أساسي في تقييم أداء نماذج التصنيف، وتمثل نسبة التنبؤات الصحيحة التي قام بها النموذج إلى إجمالي التنبؤات التي قام بها. بمعنى آخر، هي نسبة الحالات التي تم تصنيفها بشكل صحيح من جميع الحالات، سواء كانت إيجابية أو سلبية.

كيفية حساب الدقة:

 

تُحسب الدقة باستخدام الصيغة التالية      : Accuracy=عدد التنبؤات الصحيحة ___________________إجمالي عدد التنبؤات

في سياق التصنيف:

عدد التنبؤات الصحيحة يتضمن التنبؤات الصحيحة للحالات الإيجابية (True Positives) والحالات السلبية (True   Negatives)

إجمالي عدد التنبؤات هو مجموع التنبؤات الصحيحة والخاطئة، بما في ذلك التنبؤات الإيجابية الخاطئة (False Positives) والتنبؤات السلبية الخاطئة (False Negatives).

مثال توضيحي:

لنفترض أن لديك مجموعة بيانات تحتوي على 100 عينة، وتم تصنيف 75 منها بشكل صحيح، بينما تم تصنيف 25 منها بشكل غير صحيح. إذا كانت التنبؤات الصحيحة هي 70 التي تتضمن كلا من True Positives و( True Negatives)، فإن:

100/70=Accuracy        0.70  =70%=             

متى يكون Accuracy مفيدًا؟

عند التوازن بين الفئات: Accuracy يكون مفيدًا عندما يكون لديك مجموعة بيانات متوازنة حيث يكون عدد الفئات الإيجابية والسلبية متساويًا أو تقريبًا متساويًا.

متى يكون Accuracy محدودًا؟

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

·         لا يميز بين النوعين المختلفين للأخطاء: Accuracy لا تميز بين الأخطاء الإيجابية الخاطئة (False Positives) والأخطاء السلبية الخاطئة (False Negatives)، والتي يمكن أن تكون مهمة في بعض التطبيقات.

في مشاريع التصنيف التي تشمل فئات غير متوازنة أو تتطلب الانتباه إلى نوع معين من الأخطاء، مثل تصنيف الحالات المرضية، قد يكون من الأفضل استخدام مقاييس أخرى مثل الاستدعاء (Recall)، الدقة (Precision)، ودرجة F1  Score) بالإضافة إلى Accuracy للحصول على صورة كاملة عن أداء النموذج.

 

·         الدقة النوعية (Precision): نسبة التنبؤات الإيجابية الصحيحة من إجمالي التنبؤات الإيجابية. تعتبر الدقة النوعية مهمة عندما تكون الأخطاء الإيجابية الكاذبة مكلفة، مثل في اكتشاف الاحتيال.

·         الحساسية (Recall): نسبة التنبؤات الإيجابية الصحيحة من إجمالي الحالات الإيجابية الحقيقية. تعتبر الحساسية مهمة عندما يكون فقدان الحالات الإيجابية الحرجة مشكلة، مثل في تشخيص الأمراض.

·         معدل F1 (F1 Score): الوسط التوافقي بين الدقة النوعية والحساسية. يوازن بين المقياسين وهو مفيد عند التعامل مع بيانات غير متوازنة.

·         ROC-AUC: المساحة تحت منحنى الـROC، الذي يمثل قدرة النموذج على التمييز بين الفئات. يقدم قيمة واحدة تلخص الأداء عبر إعدادات عتبة مختلفة.

مقدمة عن مشروع تصنيف مرض السكري باستخدام تعلم الآلة

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

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

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

التقنيات المستخدمة

الانحدار اللوجستي (Logistic Regression): أداة بسيطة ولكن فعالة لتصنيف الحالات الثنائية، حيث سيتم تطبيق تقنيات التنظيم لتحسين أداء النموذج.

تقييم الأداء: لتقييم أداء النموذج، سيتم استخدام مجموعة من مقاييس الأداء بما في ذلك الدقة (Accuracy)، الدقة (Precision)، الاستدعاء (Recall)، ودرجة F1. ستساعد هذه المقاييس في فهم مدى فعالية النموذج في التنبؤ بدقة بما إذا كان الشخص مصابًا بالسكري.

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


Step 1: Setting Up Google Colab

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
from sklearn.metrics import accuracy_score, precision_score, recall_score,
f1_score, roc_auc_score, confusion_matrix


Step 3: Load and Explore the Data

Let’s assume the dataset is stored in a CSV file named diabetes.csv. Upload the file to Google Colab and load the dataset.


# استيراد مكتبة pandas لتحميل ومعالجة البيانات
import pandas as pd

# تحميل مجموعة البيانات من ملف CSV
df = pd.read_csv('/content/diabetes.csv')

# عرض أول بضع صفوف من البيانات للتحقق من التحميل الصحيح
df.head()


Step 4: Data Preprocessing

Checking for Missing Values First, check if the dataset has missing values.


# التحقق من القيم الفارغة في مجموعة البيانات
df.isnull().sum()


0
Pregnancies0
Glucose0
BloodPressure0
SkinThickness0
Insulin0
BMI0
DiabetesPedigreeFunction0
Age0
Outcome0

Feature Scaling

Since the values for glucose, BMI, age, and other features vary significantly in range, we’ll use StandardScaler to normalize the data.



# تقسيم البيانات إلى ميزات X والمتغير المستهدف y
X = df.drop(columns='Outcome')
y = df['Outcome']

# تطبيق معيار StandardScaler لتقييس البيانات
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)


Step 5: Splitting the Data into Training and Test Sets

We split the dataset into training and testing sets, typically 80% for training and 20% for testing.


# تقسيم البيانات إلى مجموعتي التدريب والاختبار
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)



Step 6: Training the Model

For this tutorial, we'll use Logistic Regression, which is ideal for binary classification.


model = LogisticRegression()
# تدريب النموذج باستخدام بيانات التدريب
model.fit(X_train, y_train)

Step 7: Making Predictions

After training the model, we use it to make predictions on the test data.


y_pred = model.predict(X_test)


Step 8: Evaluating the Model

# حساب الدقة (Accuracy)
accuracy = accuracy_score(y_test, y_pred)

# حساب الدقة (Precision)
precision = precision_score(y_test, y_pred)

# حساب الاستدعاء (Recall)
recall = recall_score(y_test, y_pred)

# حساب درجة F1
f1 = f1_score(y_test, y_pred)

# حساب AUC-ROC (قد تحتاج إلى احتماليات التنبؤ بدلاً من التصنيفات النهائية)
# لموديلات التصنيف الثنائي
y_prob = model.predict_proba(X_test)[:, 1]
roc_auc = roc_auc_score(y_test, y_prob)

# حساب مصفوفة الالتباس (Confusion Matrix)
conf_matrix = confusion_matrix(y_test, y_pred)

# طباعة النتائج
print(f'Accuracy: {accuracy:.4f}')
print(f'Precision: {precision:.4f}')
print(f'Recall: {recall:.4f}')
print(f'F1 Score: {f1:.4f}')
print(f'ROC-AUC: {roc_auc:.4f}')
print(f'Confusion Matrix:\n{conf_matrix}')



# output
Accuracy: 0.7532 Precision: 0.6491 Recall: 0.6727 F1 Score: 0.6607 ROC-AUC: 0.8147 Confusion Matrix: [[79 20] [18 37]]

تحليل نتائج الأداء لنموذج التصنيف يمكن أن يوضح كيفية أداء النموذج وكيف يمكن تحسينه. دعنا نحلل كل مقياس بناءً على القيم التي قدمتها:

1. الدقة (Accuracy)


  • القيمة:
    0.7532

  • التحليل:
    تعني أن 75.32% من التنبؤات كانت صحيحة. هذه
    القيمة تعطي فكرة عامة عن مدى صحة النموذج، ولكنها قد تكون خادعة إذا كان
    هناك اختلال في توزيع الفئات.

2. الدقة (Precision)

  • القيمة:
    0.6491

  • التحليل:
    تعني أن من بين جميع التنبؤات التي صنفها
    النموذج كـ "إيجابي"، 64.91% منها كانت صحيحة. إذا كان الهدف هو
    تقليل عدد التنبؤات الإيجابية الخاطئة، فإن تحسين الدقة مهم.

3. الاستدعاء (Recall)

  • القيمة:
    0.6727

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

4. درجة F1(F1 Score)

  • القيمة:
    0.6607

  • التحليل:
    تعكس درجة
    F1التوازن بين الدقة والاستدعاء، وتعتبر مفيدة
    عندما تحتاج إلى التوازن بين تقليل الأخطاء الإيجابية الخاطئة وتقليل حالات الإيجابيات الفائتة. قيمة F1 البالغة
    0.6607 تعني أن النموذج يحقق توازنًا معقولًا بين الدقة والاستدعاء.

5. ROC-AUC

  • القيمة:
    0.8147

  • التحليل:
    يشير إلى أن النموذج لديه قدرة جيدة على التمييز بين الفئات. قيمة AUC-ROC بالقرب من
    1 تعني أن النموذج ممتاز في التمييز بين الفئات، بينما قيمة أقل من 0.5
    تعني أن النموذج أسوأ من اختيار عشوائي. في هذه الحالة، AUC-ROC البالغة
    0.8147 تعني أن النموذج قوي جدًا في التمييز بين الفئات.

مصفوفة الالتباس (Confusion Matrix)

[[79 20]
[18 37]]
  • التحليل: توضح مصفوفة الالتباس التفاصيل التالية:

    • True Negatives (TN): 79 – عدد الحالات السلبية التي تم تصنيفها بشكل صحيح.
    • False Positives (FP): 20 – عدد الحالات السلبية التي تم تصنيفها بشكل إيجابي (أخطاء إيجابية)
    • False Negatives (FN): 18 – عدد الحالات الإيجابية التي تم تصنيفها بشكل سلبي (أخطاء سلبية).

    • True Positives (TP): 37 – عدد الحالات الإيجابية التي تم تصنيفها بشكل صحيح.

 


# خطوة 9: تطبيق تحسين المعلمات (Hyperparameter Tuning) على نموذج الانحدار اللوجستي
(Logistic Regression)
model = LogisticRegression(C=0.01, penalty='l2')
model.fit(X_train, y_train)
y_pred = model.predict(X_test)


# output بعد التحسين واعاده تطبيق الخطوه رقم 8
Accuracy: 0.7857 Precision: 0.7895 Recall: 0.5455 F1 Score: 0.6452 ROC-AUC: 0.8149 Confusion Matrix: [[91 8] [25 30]]


 

عند مقارنة النتائج الجديدة بمقاييس الأداء السابقة، نلاحظ وجود تحسينات في الدقة (Precision) ولكن مع انخفاض في الاستدعاء (Recall) ودرجة F1. يعكس ذلك أن النموذج أصبح أكثر دقة في تصنيف الحالات الإيجابية، ولكن على حساب عدم اكتشاف جميع الحالات المصابة بالسكري (انخفاض في الاستدعاء).

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

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


ملاحظة: هذا المشروع هو للتدريب والتعلم وليس للتركيز على النتائج النهائية

comments 0

See all"ON"
Name is required.
Valid email is required.