Saturday, 11 July 2026 | التحديث اليومي نظرة ثاقبة للذكاء الاصطناعي، مكتوبة للبناة

كيف تبني أول نموذج تعلُّم آلي لك بلغة بايثون (٢٠٢٦)

محدّث · نُشِر لأول مرة في ١٨ مايو ٢٠٢٦

أفضل طريقة لفهم التعلُّم الآلي هي بناء نموذج بنفسك. وقد يكون ذلك أقل إثارة للرهبة مما يبدو — فباستخدام لغة بايثون والمكتبة المناسبة، يبلغ طول أول نموذج عملي لك نحو ٢٠ سطرًا من الكود. وتتناول هذه الدورة التعليمية كل خطوةٍ بالتفصيل، موضِّحة ليس فقط ماذا تكتب، بل أيضًا لماذا.

أبرز الاستنتاجات

  • ستستخدم بايثون ومكتبة scikit-learn — وهي المكتبة القياسية سهلة الاستخدام للمبتدئين في مجال التعلُّم الآلي.
  • سير العمل هو كالتالي: تحميل البيانات → تقسيمها → تدريب النموذج → تقييم الأداء → إجراء التنبؤات.
  • القاعدة الذهبية هي: يجب دائمًا اختبار النموذج على بيانات لم يرها إطلاقًا أثناء مرحلة التدريب.
  • لا حاجة لأي رياضيات متقدمة — إذ تتولى مكتبة scikit-learn التعامل مع الأجزاء الصعبة.

ما الذي ستُنشئه

ستُنشئ نموذج تصنيف — أي نموذجًا يصنِّف العناصر ضمن فئات محددة. وسنستخدم مجموعة البيانات الكلاسيكية للمبتدئين، وهي مجموعة بيانات الأيريس (Iris dataset): التي تحتوي على قياسات لزهور الأيريس (طول وعرض التويجات والبتلات)، حيث تتمثل المهمة في التنبؤ بنوع الزهرة. وهي مجموعة صغيرة ونظيفة ومدمجة مسبقًا في مكتبة scikit-learn، ما يجعلها مثالية لإنشاء أول نموذج لك.

نفس الخطوات الخمس التي ستتعلَّمها هنا تنطبق على ما يقرب من كل مشاريع التعلُّم الآلي، مهما كان حجمها.

الخطوة الأولى: إعداد الأدوات

تحتاج إلى لغة بايثون ومحركين برمجيين. scikit-learn هي المكتبة الأساسية — فهي توفر مجموعات البيانات والخوارزميات وأدوات التقييم عبر واجهة مستخدم متسقة وسهلة الاستخدام للمبتدئين.

ثبِّتها من واجهة سطر الأوامر لديك كما يلي:

pip install scikit-learn pandas

يمكنك كتابة الكود في ملف عادي بصيغة .py لكن استخدام دفتر جوبيتر (Jupyter notebook) (أو دفتر سحابي مجاني مثل Google Colab) هو الخيار الأمثل للتعلُّم — إذ يمكنك تشغيل الكود في أجزاء صغيرة ومراقبة النتيجة الفورية لكل جزء.

الخطوة الثانية: تحميل البيانات

يبدأ كل مشروع تعلُّم آلي بالبيانات. وهنا سنقوم بتحميل مجموعة بيانات الأيريس المدمجة مسبقًا:

from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data      # القياسات (المدخلات / السمات)
y = iris.target    # الأنواع (التسميات / الإجابات)

print("شكل X:", X.shape)   # (150, 4) — 150 زهرة، وكل واحدة لها 4 قياسات
print("الفئات:", iris.target_names)

يوجد متغيران أساسيان هنا، ويُعتبر التسمية المستخدمة اتفاقية عالمية:

  • س يحتوي على السمات — المدخلات التي يتعلم منها النموذج (القياسات الأربعة).
  • ص يحتوي على التسميات — الإجابات الصحيحة (النوع النباتي).

وبما أننا نمتلك الإجابات، فإن هذه العملية تُعَدّ تعلُّمًا خاضعًا للإشراف.

الخطوة ٣: تقسيم البيانات

وهذه أهم خطوة للحصول على نتيجةٍ صادقةٍ وموثوقة. ويجب عليك تقسيم بياناتك إلى جزأين:

  • أ مجموعة التدريب يتعلم منها النموذج.
  • أ مجموعة الاختبار لا يراها النموذج إطلاقًا أثناء التدريب — وتُستخدم فقط لتقييم أدائه.

فإذا أجرت الاختبار على نفس البيانات التي درّبت عليها النموذج، فستكون قياسك حينها لا يتجاوز مجرد قدرة النموذج على الحفظ، وليس التعلُّم الحقيقي. (وهكذا تكتشف حالات الانحراف الزائد (Overfitting).)

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

test_size=0.2 تحتفظ بـ ٢٠٪ من البيانات للاختبار، وتدرّب النموذج على الـ ٨٠٪ المتبقية. random_state=42 يجعل عملية التقسيم العشوائي قابلة للتكرار، بحيث تحصل على نفس النتيجة في كل مرة تشغّل فيها الكود.

الخطوة ٤: اختيار النموذج وتدريبه

والآن نبدأ بالتعلُّم الآلي نفسه. سنستخدم خوارزمية الغابة العشوائية — وهي خوارزمية دقيقة وموثوقة ومناسبة للمبتدئين (راجع دليل الخوارزميات الخاص بنا دليل الخوارزميات).

وفي مكتبة scikit-learn، يتطلب تدريب نموذج ما سطرين فقط:

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

وتلك الدعوة .fit() هي هو عملية التدريب. إذ يدرس النموذج خصائص مجموعة التدريب وتسمياتها، ويتعلّم الأنماط التي تربط بين القياسات والأنواع النباتية. وتتولى مكتبة scikit-learn إدارة جميع العمليات الرياضية الكامنة وراء تلك السطر الوحيد.

الخطوة ٥: تقييم النموذج

الآن نتحقق من مدى جودة التعلُّم — باستخدام مجموعة الاختبار التي لم يرها النموذج من قبل:

from sklearn.metrics import accuracy_score

predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)

print(f"الدقة: {accuracy:.2%}")

.predict() تطالب النموذج بتصنيف الأزهار في مجموعة الاختبار؛ بينما accuracy_score تُقارن تخمينات النموذج بالإجابات الصحيحة الفعلية. وفي مجموعة بيانات آيرس Iris، عادةً ما تحصل على دقة تتراوح بين ٩٥٪ و١٠٠٪ — أي أن النموذج يُحدِّد النوع الصحيح لأغلب الأزهار التي لم يسبق له رؤيتها من قبل.

الخطوة ٦: إجراء تنبؤ على بيانات جديدة

وهذا هو المكسب الحقيقي: استخدام النموذج على مدخلاتٍ جديدة تمامًا. فعند إدخال مجموعة من القياسات، يتنبّأ النموذج بالنوع النباتي المقابل:

new_flower = [[5.1, 3.5, 1.4, 0.2]]   # قياسات السيبال والبتلة
prediction = model.predict(new_flower)

print("النوع المتوقع:", iris.target_names[prediction[0]])

وهكذا يكتمل نموذج التعلُّم الآلي: مدرّب ومُختبر ويُجري تنبؤات على بيانات لم يسبق له رؤيتها من قبل.

سير العمل الكامل

إن هذه الخطوات الخمس ليست مجرد تمارين تدريبية — بل هي الهيكل الأساسي الذي يعتمد عليه عمومًا كل مشروع في مجال التعلُّم الآلي الخاضع للإشراف:

الخطوةما تقوم به
١. تحميل البياناتاسترجاع الخصائص (X) والتسميات (y)
٢. تقسيم البياناتفصل مجموعة التدريب عن مجموعة الاختبار
٣. التدريبmodel.fit() يتعلّم النموذج النمط المطلوب
٤. التقييمقياس الدقة على بيانات الاختبار غير المرئية
٥. التنبؤmodel.predict() على مدخلات جديدة

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

إلى أين تتجه بعد ذلك؟

للمتابعة في البناء:

  • جرب خوارزميات أخرى — غيّر مصنف الغابة العشوائية لـ الانحدار اللوجستي أو آلة الدعم الناقص (SVC) وقارن النتائج. واجهة مكتبة scikit-learn المتسقة تجعل هذه المهمة بسيطة للغاية.
  • جرّب مجموعات بيانات أخرى — تدرّب على مجموعات بيانات مجانية تلك التي تثير اهتمامك.
  • تعلّم إعداد البيانات — فالبيانات الحقيقية غالبًا ما تكون فوضوية؛ لذا فإن تنظيفها وإعدادها يشكّل الجزء الأكبر من العمل.
  • استكشف طرق التقييم — فالدقة ليست المقياس الوحيد؛ بل تعلّم مفاهيم الدقة والاستدعاء والتحقق المتقاطع.

الأخطاء الشائعة التي تُعطّل نموذجك الأول بصمت

لقد تدرّب نموذجك وعرض درجة دقة — لكن وجود رقم يبدو جيدًا لا يعني بالضرورة أن النموذج يعمل بشكل فعّال. وهذه هي الأخطاء التي يقع فيها المبتدئون في أغلب الأحيان، وكلها سهلة التجنّب بمجرد أن تدرك وجودها.

  • تقييم النموذج على بيانات شاهدها من قبل. إذا قمت بحساب الدقة على بيانات التدريب، فأنت بذلك تقيّم النموذج بناءً على الإجابات التي حفظها فقط. وبالتالي فإن الحصول على درجة ١٠٠٪ في هذه الحالة لا تعني شيئًا. ويجب دائمًا تقييم النموذج على مجموعة الاختبار المنفصلة التي أنشأتها عند تقسيم البيانات — فهذه الدرجة وحدها هي التي تمثّل تقديرًا للأداء في العالم الحقيقي.
  • تسريب البيانات (Data leakage): السماح لبيانات الاختبار بالتأثير في عملية التدريب. وهذا أخطر خطأ وأقلّها وضوحًا. فإذا قمت بتوحيد القياس أو تطبيع البيانات أو ملء القيم المفقودة قبل قبل التقسيم، فإن الإحصائيات المستخلصة من مجموعة الاختبار (مثل متوسط عمود ما) تتسرب إلى مرحلة التدريب وتُ inflated درجتك. أما الحل فهو الالتزام الصارم بالتسلسل الزمني الصحيح: قسّم البيانات أولًا، ثم طبّق دالة fit على مجموعة التدريب فقط لأي معالج (transformer)، و طبّق دالة apply فقط على مجموعة الاختبار. وتُشير وثائق scikit-learn إلى أن هذه المشكلة تُعدّ واحدة من أكثر الأخطاء شيوعًا في مجال تعلُّم الآلة.
  • نسيان توحيد القياس عندما تتطلبه الخوارزمية. تتأثر الخوارزميات المعتمدة على المسافات أو التدرجات (مثل الجيران الأقرب، وآلات الدعم الناقص، والانحدار اللوجستي) سلبًا إذا كانت إحدى المتغيرات التمييزية تتراوح بين ٠ و١ بينما تتراوح الأخرى بين ٠ و١٠٠٠٠٠. أما نماذج الأشجار مثل الغابات العشوائية فلا تتأثر بهذا الأمر. لذا تأكّد من معرفة الفئة التي تنتمي إليها الخوارزمية التي تستخدمها.
  • الاعتماد الأعمى على الدقة عند وجود عدم توازن في البيانات. فإذا كانت نسبة ٩٥٪ من عيّناتك تنتمي إلى فئة واحدة، فإن نموذجًا يخمن دائمًا هذه الفئة سيحقّق دقة ٩٥٪ رغم أنه عديم الفائدة تمامًا. ولذلك، عند وجود اختلال في توزيع الفئات، اقرأ قيم الدقة والاستدعاء ودرجة F1 من دالة classification_report بدلًا من الاعتماد على الدقة وحدها.

وأفضل وسيلة لمنع تسريب البيانات هي استخدام خط أنابيب (Pipeline)خط أنابيب (Pipeline). فدمج خطوات المعالجة المبدئية والنموذج في كائن واحد يعني أن كل تحويل يتم تطبيقه تلقائيًّا على الجزء المناسب من البيانات في كل مرة — بما في ذلك أثناء التحقق المتقاطع:

  • from sklearn.pipeline import make_pipeline
  • model = make_pipeline(StandardScaler(), LogisticRegression())
  • ثم استدعِ model.fit(X_train, y_train) بالضبط كما فعلت سابقًا.

عادة أخيرة يستحق بناؤها مبكرًا: تقسيم التدريب/الاختبار الوحيد يُقدِّم تقديرًا عشوائيًّا. وإعادة التشغيل باستخدام تقسيم عشوائي مختلف قد تُغيِّر نتيجتك بعدة نقاط. وبمجرد أن تكتسب الراحة الكافية، استبدل التقسيم الوحيد بـ cross_val_score, الذي يقوم بالتدريب والاختبار عبر عدة طيات (folds) ويُبلِّغ بالمتوسط — وهي قراءةٌ أكثر صدقًا بكثيرٍ بشأن ما إذا كان نموذجك قد تعلَّم فعلًا شيئًا ما.

الأسئلة الشائعة

كيف أبني نموذج تعلُّم آلي باستخدام بايثون؟

استخدم مكتبة scikit-learn. وتتكوّن خطوات العمل وفق التالي: قم بتحميل بياناتك إلى متغيرات التمييز (X) والتصنيفات (y)، ثم قسّمها إلى مجموعتي تدريب واختبار، وابنِ نموذجًا واستدعِ دالة .fit() لتدريبه، ثم قيّمه على مجموعة الاختبار، واستخدم دالة .predict() للتنبؤ بالبيانات الجديدة. وبذلك، يمكن بناء أول نموذج في نحو ٢٠ سطرًا من التعليمات البرمجية.

ما المكتبة الأنسب للمبتدئين في مجال تعلُّم الآلة؟

scikit-learn. فهي توفر مجموعة واسعة من الخوارزميات ومجموعات البيانات الجاهزة وأدوات التقييم عبر واجهة واحدة بسيطة ومتسقة، كما أنها تتولى التعامل مع الرياضيات الأساسية نيابةً عنك. وهي نقطة البداية القياسية قبل الانتقال إلى إطارات العمل الخاصة بالتعلُّم العميق.

هل يتطلّب بناء نموذج تعلُّم آلي إتقانًا رياضيًّا متقدمًا؟

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

لماذا يجب تقسيم البيانات إلى مجموعتي تدريب واختبار؟

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

ما الذي تقوم به الدالة model.fit()؟

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

حقق نموذجي دقةً عاليةً — فهل هذا يعني أنه جيِّد؟

ليس بالضرورة. فالدقة العالية ذات معنىٍ فقط إذا قيست على مجموعة الاختبار المحفوظة (held-out test set)، وليس على بيانات التدريب، وإذا كانت فئاتك متوازنةً بشكل معقول. أما في مجموعة بياناتٍ تهيمن فيها فئةٌ واحدة، فقد تنتج النتيجة العالية من كون النموذج يخمن الفئة السائدة في كل مرةٍ دون تمييز. لذا تحقَّق من الدقة (precision)، والاستدعاء (recall)، ودرجة F1 باستخدام classification_report، وتأكد من أن الرقم جاء من بيانات لم يتدرب عليها النموذج مطلقًا.

كيف أحفظ نموذجي المدرَّب وأستخدمه لاحقًا؟

استخدم مكتبة بايثون joblib المُضمَّنة مع scikit-learn. استدعِ الدالة joblib.dump(model, "model.joblib") للكتابة إلى القرص، واستخدم joblib.load("model.joblib") لتحميل النموذج مجددًا في نص برمجي آخر — دون الحاجة لإعادة التدريب. واحفظ خط الأنابيب (Pipeline) الكامل، وليس المُقدِّر النهائي فقط، حتى تنتقل عمليات القياس القياسي (scaling) ومعالجة البيانات المسبقة مع النموذج، وتُعامَل المدخلات الجديدة بنفس الطريقة تمامًا.

كيف أنتقل من مجموعة بيانات مضمنة إلى بياناتي الخاصة؟

حمِّل بياناتك باستخدام مكتبة pandas — pandas.read_csv("yourfile.csv") — ثم فصِّل أعمدة الإدخال (المُتغيرات التفسيرية أو الخصائص، والتي تُسمى عادةً س) عن العمود الذي تريد التنبؤ به (المتغير المستهدف أو الهدف، ص). ومن بعد ذلك تكون خطوات العمل مطابقة تمامًا: التقسيم، التدريب، التقييم. أما الجزء الجديد من العمل فهو في الغالب تنظيف البيانات: التعامل مع القيم المفقودة، وترميز الفئات النصية إلى أرقام، واختيار الأعمدة التي تمتلك فعلاً قيمةً تنبؤية. وهذه الخطوة الخاصة بإعداد البيانات هي حيث يُقضى معظم الوقت الفعلي في تطبيقات التعلُّم الآلي في العالم الحقيقي.

الخلاصة

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

لا تكتفَ فقط بقراءة هذا المحتوى — بل افتح دفتر ملاحظات (Notebook) وشغّل التعليمات البرمجية بنفسك. غيّر الخوارزمية، وجرب مجموعة بيانات مختلفة، واعمل على كسر الكود ثم إصلاحه. فالمفاهيم المتعلقة بتعلُّم الآلة تترسخ بسرعة أكبر بكثير بمجرد أن تدرب نموذجًا بيديك شخصيًّا. وعندما تصبح جاهزًا لمزيد من التحديات، فاحصل على مجموعة بيانات مجانية وابنِ مشروعًا خاصًّا بك.

انتقل إلى الأعلى
Featured on There's An AI For That