الاختلافات بين LabelEncoder و OneHotEncoder في SciKit Learn

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




ترميز الأحرف


بادئ ذي بدء ، يمكن العثور على وثائق SciKit Learn لـ LabelEncoder هنا . الآن النظر في البيانات التالية:


بيانات من SuperDataScience

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


ولتحويل هذه الفئات إلى نماذج يمكن فهمها للبيانات الرقمية ، نستخدم فئة LabelEncoder . وبالتالي ، كل ما يتعين علينا القيام به للحصول على السمة الخاصة بالعمود الأول هو استيراد الفئة من مكتبة sklearn ، ومعالجة العمود بوظيفة fit_transform ، واستبدال البيانات النصية الحالية بالبيانات المشفرة الجديدة. دعنا نرى الكود.


from sklearn.preprocessing import LabelEncoder labelencoder = LabelEncoder() x[:, 0] = labelencoder.fit_transform(x[:, 0]) 

من المفترض أن تكون البيانات في المتغير x . بعد تشغيل الشفرة أعلاه ، إذا قمت بالتحقق من قيمة x ، فسترى أن البلدان الثلاثة في العمود الأول قد تم استبدالها بالأرقام 0 و 1 و 2.



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


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




OneHotEncoder


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


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


بالنسبة للصفوف التي يكون عمودها الأول هو فرنسا ، سيتم تعيين العمود "فرنسا" على "1" والعمودين الآخرين على "0". وبالمثل ، بالنسبة للصفوف التي يكون العمود الأول هو ألمانيا ، سيكون عمود ألمانيا "1" وسيكون للعمودين الآخرين "0".


يتم ذلك ببساطة شديدة:


 from sklearn.preprocessing import OneHotEncoder onehotencoder = OneHotEncoder(categorical_features = [0]) x = onehotencoder.fit_transform(x).toarray() 

في المنشئ ، نشير إلى العمود الذي يجب معالجته بواسطة OneHotEncoder ، في حالتنا - [0] . ثم قم بتحويل الصفيف x باستخدام دالة fit_transform لكائن الترميز الذي أنشأته للتو. هذا كل شيء ، لدينا الآن ثلاثة أعمدة جديدة في مجموعة البيانات:



كما ترون ، بدلاً من عمود واحد في بلد ما ، حصلنا على ثلاثة أعمدة جديدة ترميز هذه البلاد.


هذا هو الفرق من LabelEncoder و OneHotEncoder .

Source: https://habr.com/ru/post/ar456294/


All Articles