اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

من الأفضل عدم فعل ذلك، لأنّ LabelEncoder مُصمم خصيصًا لتحويل الفئات النصية مثل أحمر، أزرق إلى أرقام  0, 1, 2.

ولو البيانات من نوع float وتُمثِّل قيمًا عددية مثل 1.5, 2.3، فهي ليست فئوية، ولا يجب تحويلها باستخدام LabelEncoder، وستحتاج إلى تسوية البيانات Normalization/Standardization في حال كانت قيمًا عددية أو التعامل معها كفئات لو تمثل تصنيفات مثل 1.0 = منخفض، 2.0 = متوسط.

ففي حال القيم float وليست فئات حقيقية، أحيانًا يُفسرها النموذج بشكل خاطئ كقيم عددية، ويؤثر على الأداء، أو تظهر قيم عشرية غير متوقعة أثناء التنبؤ مثل 2.5، بينما الـ LabelEncoder يُحوّلها إلى أعداد صحيحة (0, 1, 2) فقط.

بالتالي لو الـ float تمثِّل فئات حوّلها إلى نص أولاً، ثم استخدم LabelEncoder أو OrdinalEncoder:

import pandas as pd
from sklearn.preprocessing import LabelEncoder

df['column'] = df['column'].astype(str)
le = LabelEncoder()
df['column_encoded'] = le.fit_transform(df['column'])

أما القيم العددية فلا تستخدم LabelEncoder، بل استخدم تقنيات معالجة البيانات العددية:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df['column_scaled'] = scaler.fit_transform(df[['column']])

وفي حال القيم العشرية تمثِّل فئات مُرتبة Ordinal، عليك استخدام OrdinalEncoder مع تحديد الترتيب يدويًّا:

from sklearn.preprocessing import OrdinalEncoder

categories = [['1.0', '2.0', '3.0']]  
encoder = OrdinalEncoder(categories=categories)
df['column_encoded'] = encoder.fit_transform(df[['column']])

وللعلم إن كانت القيم العشرية ناتجة عن أخطاء في البيانات كـ 1.0 بدلًا من 1، حوّلها إلى أعداد صحيحة int أولاً:

df['column'] = df['column'].astype(int)

 

  • 0
نشر
بتاريخ 7 ساعة قال Mustafa Suleiman:

من الأفضل عدم فعل ذلك، لأنّ LabelEncoder مُصمم خصيصًا لتحويل الفئات النصية مثل أحمر، أزرق إلى أرقام  0, 1, 2.

ولو البيانات من نوع float وتُمثِّل قيمًا عددية مثل 1.5, 2.3، فهي ليست فئوية، ولا يجب تحويلها باستخدام LabelEncoder، وستحتاج إلى تسوية البيانات Normalization/Standardization في حال كانت قيمًا عددية أو التعامل معها كفئات لو تمثل تصنيفات مثل 1.0 = منخفض، 2.0 = متوسط.

ففي حال القيم float وليست فئات حقيقية، أحيانًا يُفسرها النموذج بشكل خاطئ كقيم عددية، ويؤثر على الأداء، أو تظهر قيم عشرية غير متوقعة أثناء التنبؤ مثل 2.5، بينما الـ LabelEncoder يُحوّلها إلى أعداد صحيحة (0, 1, 2) فقط.

بالتالي لو الـ float تمثِّل فئات حوّلها إلى نص أولاً، ثم استخدم LabelEncoder أو OrdinalEncoder:

import pandas as pd
from sklearn.preprocessing import LabelEncoder

df['column'] = df['column'].astype(str)
le = LabelEncoder()
df['column_encoded'] = le.fit_transform(df['column'])

أما القيم العددية فلا تستخدم LabelEncoder، بل استخدم تقنيات معالجة البيانات العددية:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df['column_scaled'] = scaler.fit_transform(df[['column']])

وفي حال القيم العشرية تمثِّل فئات مُرتبة Ordinal، عليك استخدام OrdinalEncoder مع تحديد الترتيب يدويًّا:

from sklearn.preprocessing import OrdinalEncoder

categories = [['1.0', '2.0', '3.0']]  
encoder = OrdinalEncoder(categories=categories)
df['column_encoded'] = encoder.fit_transform(df[['column']])

وللعلم إن كانت القيم العشرية ناتجة عن أخطاء في البيانات كـ 1.0 بدلًا من 1، حوّلها إلى أعداد صحيحة int أولاً:

df['column'] = df['column'].astype(int)

 

الف شكرااا جدا لحضرتك

جزاك الله كل خير

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...