Ali Ahmed55 نشر 29 يناير أرسل تقرير نشر 29 يناير السلام عليكم هو عندي تحول الاعمد الفئوي باستخدم الLabelEncoder هل فيه مشكله لو بيانات نوعها flaot مش int عند تدريب النموذج ؟ 1 اقتباس
0 Mustafa Suleiman نشر 29 يناير أرسل تقرير نشر 29 يناير من الأفضل عدم فعل ذلك، لأنّ 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) 1 اقتباس
0 Ali Ahmed55 نشر 30 يناير الكاتب أرسل تقرير نشر 30 يناير بتاريخ 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) الف شكرااا جدا لحضرتك جزاك الله كل خير اقتباس
السؤال
Ali Ahmed55
السلام عليكم
هو عندي تحول الاعمد الفئوي باستخدم الLabelEncoder هل فيه مشكله لو بيانات نوعها flaot مش int عند تدريب النموذج ؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.