كيفية إجراء ترميز واحد ساخن لمتغيرات فئوية متعددة

عقدة المصدر: 841101

في هذه المقالة، سوف نتعلم كيف يمكننا التعامل مع المتغيرات الفئوية المتعددة باستخدام تقنية هندسة الميزات One Hot Encoding.

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

هندسة الميزات

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

يعد مفهوم الشفافية لنماذج التعلم الآلي أمرًا معقدًا لأن النماذج المختلفة غالبًا ما تتطلب أساليب مختلفة لأنواع مختلفة من البيانات. مثل:-

  • بيانات مستمرة
  • الميزات الفئوية
  • قيم مفقودة
  • تطبيع
  • التواريخ والوقت

لكننا هنا سنناقش فقط الميزات الفئوية، والميزات الفئوية هي تلك الميزات التي يكون فيها نوع البيانات نوع كائن. قيمة نقطة البيانات في أي ميزة فئوية ليست في شكل رقمي، بل كانت في شكل كائن.

هناك العديد من التقنيات للتعامل مع المتغيرات الفئوية، وبعضها:

  • ترميز التسمية أو الترميز الترتيبي
  • ترميز ساخن واحد
  • الترميز الوهمي
  • ترميز التأثير
  • ترميز ثنائي
  • ترميز بازل
  • ترميز التجزئة
  • ترميز الهدف

لذلك، نحن هنا نتعامل مع الميزات الفئوية بواسطة One Hot Encoding، وبالتالي سنناقش أولاً One Hot Encoding.

ترميز واحد ساخن

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

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

مثلا البيانات المتعلقة بالجنس في شكل 'ذكر' و 'أنثى'.

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

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

على سبيل المثال، نقوم بتشفير متغير الألوان،

أحمر اللون  اللون الأزرق
0 1
1 0
0 1

والآن سنبدأ رحلتنا. في الخطوة الأولى، نأخذ مجموعة بيانات للتنبؤ بأسعار المنازل.

بيانات

سنستخدم هنا مجموعة بيانات house_price التي تُستخدم في التنبؤ بسعر المنزل وفقًا لحجم المنطقة.

إذا كنت ترغب في تنزيل مجموعة بيانات التنبؤ بأسعار المنازل، فانقر فوق هنا.

استيراد الوحدات

الآن، يتعين علينا استيراد وحدات مهمة من لغة بايثون والتي سيتم استخدامها للتشفير السريع

# استيراد الباندا استيراد الباندا كـ pd # استيراد numpy استيراد numpy كـ np # استيراد OneHotEncoder من sklearn.preprocessing import OneHotEncoder()

هنا، نستخدم الباندا التي تستخدم لتحليل البيانات، وNumPyused للمصفوفات ذات الأبعاد n، ومن sklearn، سنستخدم فئة واحدة مهمة One Hot Encoder للتشفير القاطع.

الآن علينا قراءة هذه البيانات باستخدام بايثون.

قراءة مجموعة البيانات

بشكل عام، مجموعة البيانات تكون في شكل ملف CSV، ومجموعة البيانات التي نستخدمها تكون أيضًا في شكل ملف CSV. لقراءة ملف CSV سوف نستخدم وظيفة الباندا read_csv(). انظر أدناه:

# قراءة مجموعة البيانات df = pd.read_csv('house_price.csv') df.head()

انتاج:-

ولكن يتعين علينا استخدام المتغيرات الفئوية فقط لجهاز تشفير ساخن واحد وسنحاول فقط الشرح باستخدام المتغيرات الفئوية لتسهيل الفهم.

لتقسيم المتغيرات الفئوية من البيانات علينا التحقق من عدد الميزات التي لها قيم فئوية.

التحقق من القيم الفئوية

للتحقق من القيم، نستخدم وظيفة pandas Select_dtypes التي تُستخدم لتحديد أنواع بيانات المتغير.

# التحقق من الميزات cat = df.select_dtypes(include='O').keys() # عرض المتغيرات cat

انتاج:-

 

يتعين علينا الآن إسقاط تلك الأعمدة الرقمية من مجموعة البيانات وسنستخدم هذا المتغير القاطع لاستخدامنا. نحن نستخدم فقط 3-4 أعمدة فئوية من مجموعة البيانات لتطبيق ترميز واحد سريع.

إنشاء إطار بيانات جديد

الآن، لاستخدام المتغيرات الفئوية، سنقوم بإنشاء إطار بيانات جديد من الأعمدة الفئوية المحددة.

# إنشاء df جديد # أعمدة الإعداد التي نستخدمها new_df = pd.read_csv('house_price.csv',usecols=['حيّ'،'الخارجي1st','الخارجي2nd']) new_df.head()

انتاج:-

يتعين علينا الآن معرفة عدد الفئات الفريدة الموجودة في كل عمود فئة.

العثور على القيم الفريدة

للعثور على قيم فريدة سوف نستخدم وظيفة الباندا الفريدة ().

# قيم فريدة في كل عمود لـ x في new_df.columns: #printing قيم فريدة print(x ,':', len(new_df[x].unique()))

انتاج:-

الحي : 25
الخارجى الأول: 1
الخارجي الثاني: 2

الآن، سنستخدم أسلوبنا في تطبيق التشفير السريع على متغيرات متعددة الفئات.

تقنية المتغيرات الفئوية المتعددة

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

المتغيرات الأكثر شيوعا

سنقوم هنا باختيار المتغيرات العشرين الأكثر شيوعًا.

لنفترض أننا نأخذ متغيرًا قاطعًا واحدًا Neighborhood.

# العثور على أفضل 20 فئة new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

انتاج:

عندما ترى في هذه الصورة الناتجة ستلاحظ أن الأسماء يتم تكرار التسمية 225 مرة في أعمدة الجوار وننزل هذا العدد آخذاً في التناقص.

لذلك أخذنا أفضل 10 نتائج من الأعلى وقمنا بتحويل أفضل 10 نتائج إلى ترميز واحد ساخن وتتحول التسميات اليسرى إلى صفر.

انتاج:-

 

قائمة المتغيرات الفئوية الأكثر شيوعا

# إنشاء قائمة بأهم 10 متغيرات top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

انتاج:-

['الأسماء'،
"كولجكر"،
"المدينة القديمة"،
"إدواردز"،
"سومرست"،
"جيلبرت"،
"نريدجت"،
"سوير"،
"NWAmes"،
"سوير دبليو"]

توجد أعلى 10 تصنيفات فئوية في عمود الجوار.

جعل ثنائي

الآن، يتعين علينا إنشاء المتغيرات الثنائية العشرة للتسميات العشرة الأولى:

# إنشاء ثنائي من التسميات

للتسمية في top_10:

new_df = np.where(new_df['الجوار']==التسمية,1,0)

new_df[['الحي']+top_10]


انتاج:-

الأسماء كولجكر المدينة القديمة إدواردز سومرست جيلبرت نريدجت النشار ناشر الخشب NWAmes سوير دبليو
0 كولجكر 0 1 0 0 0 0 0 0 0 0
1 فينكر 0 0 0 0 0 0 0 0 0 0
2 كولجكر 0 1 0 0 0 0 0 0 0 0
3 كروفور 0 0 0 0 0 0 0 0 0 0
4 NoRidge 0 0 0 0 0 0 0 0 0 0
5 ميتشل 0 0 0 0 0 0 0 0 0 0
6 سومرست 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 المدينة القديمة 0 0 1 0 0 0 0 0 0 0
9 برك سايد 0 0 0 0 0 0 0 0 0 0
10 النشار ناشر الخشب 0 0 0 0 0 0 0 1 0 0
11 نريدجت 0 0 0 0 0 0 1 0 0 0

يمكنك أن ترى كيف يتم الآن تحويل التصنيفات العشرة الأولى إلى تنسيق ثنائي.

دعونا نأخذ مثالا، انظر في الجدول حيث 1 مؤشر فينكر والتي لم تكن تنتمي إلى تصنيف الفئات العشرة الأوائل لدينا، لذا سيؤدي ذلك إلى 0 جميع الأعمدة.

الآن سنفعل ذلك لجميع المتغيرات الفئوية التي اخترناها أعلاه.

جميع المتغيرات المحددة في OneHotEncoding

# لجميع المتغيرات الفئوية التي اخترناها def top_x(df2,variable,top_x_labels): للتسمية في top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read البيانات مرة أخرى data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) # قم بتشفير الحي في الفئات العشر الأكثر شيوعًا top_x(data, 'الجوار'،top_10) # عرض البيانات data.head()

انتاج:-

الآن، نحن هنا نطبق التشفير الساخن على جميع المتغيرات الفئوية المتعددة.

سنرى الآن مزايا وعيوب One Hot Encoding للمتغيرات المتعددة.

المزايا

  • واضحة للتنفيذ
  • لا يتطلب الكثير من الوقت لاستكشاف المتغيرات
  • لا يوسع مساحة الميزة بشكل كبير.

عيوب

  • لا يضيف أي معلومات قد تجعل المتغير أكثر تنبؤًا
  • لا تحتفظ بمعلومات المتغيرات التي تم تجاهلها.

ملاحظات نهاية

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

تواصل معي على لينكد إن: ملفي الشخصي

إقرأ مقالاتي الأخرى: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

شكرا لك

الوسائط الموضحة في هذه المقالة ليست مملوكة لشركة Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

يمكنك أيضًا قراءة هذه المقالة على تطبيق الجوال الخاص بنا احصل عليه في Google Play

مقالات ذات صلة

المصدر: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

الطابع الزمني:

اكثر من تحليلات Vidhya