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

السؤال

نشر

السلام عليكم

نماذج زي IterativeImputer و KNNImputer و SimpleImputer مش بتشتغل غير علي بيانات رقمي بس البيانات ال عندي فيه اعمد نصيه يس الاعمد دي مافيهاش قيمه مفقود فا هل اقدر اشيل الاعمد دي من البيانات و اخلي فقط البيانات الرقمه الان دي فيه القيمه المفقود وكمان النماذج دي مش هتشغل غير عليها فا هل اقدر اعمل كده ؟

Recommended Posts

  • 0
نشر

الطريقة الأفضل هي استخدام ColumnTransformer من مكتبة sklearn.

لكن لا مشكلة فيما ذكرته الطريقة سليمة، ستقوم بفصل مجموعة البيانات  إلى قسمين جزء يحتوي على الأعمدة الرقمية فقط التي بها قيم مفقودة وتريد معالجتها، وجزء يحتوي على الأعمدة النصية التي ليس بها قيم مفقودة ولن تحتاج إلى imputation أي معالجة.

ثم معالجة القيم المفقودة من خلال تطبيق أحد النماذج IterativeImputer, KNNImputer, SimpleImputer على الجزء الرقمي فقط لملء القيم المفقودة.

حيث SimpleImputer بسيط وسريع، جيد للبداية من خلال استراتيجيات mean, median, most_frequent, constant، وKNNImputer يعتمد على القيم المجاورة، وهو أدق ولكن أبطأ، بينما IterativeImputer يستخدم نماذج أخرى لتقدير القيم المفقودة، وهو الأقوى والأكثر استهلاكًا للوقت.

وبعد معالجة القيم المفقودة في الأعمدة الرقمية، تقوم بإعادة دمجها مع الأعمدة النصية الأصلية لتحصل على مجموعة بيانات كاملة وجاهزة للخطوات التالية، كتحويل الأعمدة النصية إلى رقمية  بواسطة One-Hot Encoding أو  Label Encoding في حال ستقوم ببناء نموذج تعلم آلة.

وعند تحويل المصفوفة الناتجة من الـ imputer إلى DataFrame مرة أخرى، تأكد من استخدام index=df.index أو index=df_numerical.index للحفاظ على ترتيب الصفوف الصحيح عند الدمج لاحقًا.

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

نعم صحيح حيث أن نماذج مثل:

  • SimpleImputer عند استخدامه مع strategy='mean' أو median
  • KNNImputer
  • IterativeImputer

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

ولهذا الصحيح هو فصل الأعمدة الرقمية عن الأعمدة النصية ومن ثم يمكنك معالجة القيم المفقودة في الأعمدة الرقمية وبعدها يمكنك إعادة دمج الاعمدة معا دون أى مشكلة.

  • 0
نشر

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

  • 0
نشر

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

  • 0
نشر

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

  • 0
نشر
بتاريخ الآن قال Ali Ahmed55:

هو اي ده ؟

كلاس في scikit-learn لتطبيق تحويلات مختلفة على أعمدة مختلفة من البيانات في نفس الوقت، أي كل التحويلات في مكان واحد، وستتجنب مشكلة تسرب البيانات.

كالتالي:

from sklearn.compose import ColumnTransformer

numeric_features = df.select_dtypes(include=['number']).columns.tolist()
text_features = df.select_dtypes(include=['object']).columns.tolist()

preprocessor = ColumnTransformer(
    transformers=[
        ('num', KNNImputer(n_neighbors=5), numeric_features),
        ('text', 'passthrough', text_features)  # الأعمدة النصية تمر كما هي
    ])

df_transformed = preprocessor.fit_transform(df)

feature_names = numeric_features + text_features
df_final = pd.DataFrame(df_transformed, columns=feature_names)

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...