0Pricing
Learn AI with Python · درس

ترميز الهدف ومعالجة الفئات المتقدمة

ترميز الهدف، وترميز التكرار، والترميز الثنائي، والتضمينات للأعمدة عالية التعددية.

ترميز الهدف ومعالجة الفئات المتقدمة درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

مشكلة ترميز المتغيرات الفئوية

تحتاج النماذج إلى أرقام، بينما تكون الفئات نصوصًا. ينجح الترميز one-hot مع عدد قليل من الفئات، لكن السمات عالية الكاردينالية (مثل آلاف المدن والمنتجات) تنشئ عددًا كبيرًا جدًا من الأعمدة.

حدود الترميز one-hot وترميز التسميات

يؤدي الترميز one-hot إلى تضخم الأبعاد. أما ترميز التسميات البسيط فيخترع ترتيبًا زائفًا (فالمدينة 5 ليست أكبر من المدينة 2). ونحتاج مع البيانات عالية الكاردينالية إلى ترميزات أكثر ذكاءً.

ما ترميز الهدف

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

import pandas as pd

means = df.groupby("city")["target"].mean()
df["city_encoded"] = df["city"].map(means)

خطر فرط التخصيص

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

تنعيم التقدير

التنعيم يدمج متوسط الفئة مع المتوسط العام، مع ترجيح كل منهما بحسب عدد العينات التي تضمها الفئة. وتميل الفئات النادرة نحو المتوسط العام، مما يقلل التباين.

import pandas as pd

global_mean = df["target"].mean()
agg = df.groupby("city")["target"].agg(["mean", "count"])
smoothing = 10
agg["enc"] = (agg["count"] * agg["mean"] + smoothing * global_mean) / (agg["count"] + smoothing)
df["city_enc"] = df["city"].map(agg["enc"])

مكتبة category_encoders

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

import category_encoders as ce

encoder = ce.TargetEncoder(cols=["city", "product"], smoothing=10)
X_enc = encoder.fit_transform(X_train, y_train)
X_test_enc = encoder.transform(X_test)

تجنب تسرّب البيانات عمليًا

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

import category_encoders as ce
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression

pipe = make_pipeline(
    ce.TargetEncoder(cols=["city"]),
    LogisticRegression(),
)
# fit inside CV to encode without leakage

الترميز الثنائي

يحوّل BinaryEncoder الفئات إلى أرقام ثنائية، مستخدمًا أعمدة بعدد log2(N) فقط بدلًا من N أعمدة. وهو حل وسط مدمج بين الترميز أحادي التمثيل وترميز الهدف.

import category_encoders as ce

encoder = ce.BinaryEncoder(cols=["product_id"])
X_enc = encoder.fit_transform(X_train)
# 256 categories -> 8 binary columns

مُرمِّزات أخرى مفيدة

توفّر category_encoders أيضًا CountEncoder (تكرار كل فئة)، وLeaveOneOutEncoder (متوسط الهدف بعد استبعاد الصف الحالي)، وCatBoostEncoder (إحصاءات الهدف المرتبة).

import category_encoders as ce

count_enc = ce.CountEncoder(cols=["city"])
loo_enc = ce.LeaveOneOutEncoder(cols=["city"])

التعامل مع ارتفاع عدد القيم الفريدة

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

import pandas as pd

freq = df["product"].value_counts()
rare = freq[freq < 20].index
df["product"] = df["product"].replace(rare, "other")

اختيار المُرمِّز

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

اختبار سريع

اختبر معرفتك بترميز البيانات الفئوية.

مراجعة

مراجعة: يستبدل ترميز الهدف الفئة بمتوسط هدفها، ويستخدم التنعيم للحد من تأثير الفئات النادرة. استخدم category_encoders (TargetEncoder وBinaryEncoder وCatBoost/LeaveOneOut)، وطبّق الملاءمة على بيانات التدريب فقط أو باستخدام الترميز خارج الطيات لتجنب تسرّب البيانات. تتعامل المُرمِّزات المدمجة مع السمات ذات العدد الكبير من القيم الفريدة، وهو ما لا يستطيع الترميز أحادي التمثيل فعله.

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

هل درس «ترميز الهدف ومعالجة الفئات المتقدمة» مجاني؟

نعم — نص درس «ترميز الهدف ومعالجة الفئات المتقدمة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

ماذا ستتعلم في «ترميز الهدف ومعالجة الفئات المتقدمة»؟

ترميز الهدف، وترميز التكرار، والترميز الثنائي، والتضمينات للأعمدة عالية التعددية. تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟

لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «ترميز الهدف ومعالجة الفئات المتقدمة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟

نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساليب اختيار السمات
  2. إنشاء السمات التفاعلية ومتعددة الحدود
  3. ترميز الهدف ومعالجة الفئات المتقدمة
  4. هندسة الميزات المؤتمتة باستخدام Featuretools
← العودة إلى Learn AI with Python