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

السؤال

نشر

السلام عليكم

هو لو عندي قيمه من 0.0 الي 2.0 واستخدم الIterativeImputer طلع غير القيمه دي ولكن في نفس الفتره يعني مثل 0.1و 1.8 هل ده يكون طبيعه والا دي بيانات مش دقيق ؟

ودي البيانات قبل iterativelmputer 

hla_match_c_high
2.0    18565
1.0     5536
0.0       79
Name: count, dtype: int64

ودي بعد استخدم الIterativelmputer

hla_match_c_high
2.0    18973
1.0     5566
1.6     1334
1.5     1042
1.7      547
1.8      418
1.4      239
1.3      206
1.2      149
0.0       86
1.9       75
1.1       68
0.9       28
0.8       20
0.7       16
0.4        8
0.1        7
0.5        6
0.2        5
0.3        4
0.6        3
Name: count, dtype: int64

 

Recommended Posts

  • 0
نشر

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

و إذا كان المتغير يمثل فئات  مثل درجات توافق، فمن الأفضل التعامل معه كمتغير تصنيفي وليس رقمي مستمر، وفي هذه الحالة يمكنك استخدام SimpleImputer مع طريقة مثل most_frequent أو KNNImputer للحفاظ على القيم الأصلية.

  • 0
نشر

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

بمعنى لو النموذج يتنبأ بقيمة بين 1 و2 (مثل 1.8)، فسيُدخلها كقيمة عشرية بدلًا من تقريبها إلى 2.

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

بالتالي لو المتغير يجب أن يكون عددًا صحيحًا، فالقيم العشرية غير منطقية وتشوّه تفسير البيانات.

ولو المتغير يمثل درجة مستمرة، فتكون القيم مقبولة، لكن يُفضَّل التحقق من سياق البيانات فهي الأساس.

أي تفقد هل المتغير يجب أن يكون، فئويًا/منفصلًا، كـ  0 = لا يوجد تطابق، 1 = تطابق جزئي، 2 = تطابق كامل.

أو عدديًا مستمرًا مثل نسبة التطابق الدقيقة.

في الحالة الأولى استخدم SimpleImputer مع إستراتيجية most_frequent (إدخال المنوال) بدلًا من IterativeImputer.

في الثانية استخدم IterativeImputer ثم قَرِّب النتائج إلى أقرب عدد صحيح:

from sklearn.impute import IterativeImputer
import numpy as np

imputer = IterativeImputer()
data_imputed = imputer.fit_transform(data)
data_imputed = np.round(data_imputed).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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...