Evalml: السماح للمكونات التي ليست "طرفية" فرعية في التسلسل الهرمي للفئة

تم إنشاؤها على ٢٣ مارس ٢٠٢١  ·  4تعليقات  ·  مصدر: alteryx/evalml

أثناء العمل على # 1989 ، اقترح freddyaboulton أن نجعل TargetImputer فئة فرعية من SimpleImputer . لسوء الحظ ، عند البحث عن مكونات قابلة للتطبيق في _get_subclasses ، فإن _get_subclasses سيجمع فقط الفئات الموجودة في أسفل التسلسل الهرمي. على سبيل المثال:

ComponentBase --> Transformer --> SimpleImputer # will only grab SimpleImputer

تكمن المشكلة في أنه إذا قمنا بتصنيف SimpleImputer إلى فئة فرعية ، فسيمكننا الوصول إلى TargetImputer ، ولكن لن يتم العثور على SimpleImputer بواسطة EvalML كمكون صالح للاستخدام:

ComponentBase --> Transformer --> SimpleImputer --> TargetImputer 
# will only grab TargetImputer, SimpleImputer is no longer a leaf

أعتقد أن القصد الأصلي هو عدم الاستيلاء على فئات غير مفيدة (على سبيل المثال: Transformer) ، ولكن هذه مشكلة إذا أردنا البناء على مكونات مفيدة لإنشاء مكونات جديدة.

التعليق الأصلي هنا: https://github.com/alteryx/evalml/pull/1989#discussion_r599894996

bug

ال 4 كومينتر

خيارات:
1.) اجعل TargetImputer تستخدم SimpleImputer.
2.) لا تحدد مكون TargetImputer ، ولكن بدلاً من ذلك قم بتطبيق SimpleImputer على الهدف.
3.) احذف _get_subclasses () لصالح قائمة المكونات الثابتة. (يفضل)
4.) اجعل _get_subclasses () أكثر ذكاءً.

الخطوة التالية: حدد موعدًا لمناقشة لتحديد كيفية القيام بذلك.

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

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

وإذا أردنا الاستفادة من SimpleImputer في TargetImputer في المستقبل ، فيمكننا استخدام التركيب على الميراث ، والذي أعتقد أنه ما يشير إليه الخيار 1.

تم الاتفاق مع freddyaboulton هنا ، وتجدر الإشارة أيضًا إلى أننا حددنا _get_subclasses() في المقام الأول لأن تتبع قائمة ثابتة من المكونات كان مملاً / محبطًا بعض الشيء لأننا أضفنا المزيد والمزيد من المكونات. إذا ذهبنا إلى 3 ، فقد يكون من المنطقي الاحتفاظ بـ _get_subclasses() ولكن أيضًا الاحتفاظ بقائمة من "الاستثناءات" مثل علبة SimpleImputer / TargetImputer ، بحيث يتم تضمينها ، ولكن هناك مكونات أخرى مثل Transformer لا تزال مستبعدة.

حسنًا أيضًا مع فكرة بعض تقنيات التكوين إذا كان ذلك ينجز المهمة.

@ angela97lin هل تعتقد أنه يمكننا إغلاق هذا؟ أعتقد أننا نتفق على أننا لسنا بحاجة إلى إجراء تغييرات على _get_subclasses لتمكين تطوير TargetImputer / المكونات الأخرى.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات