Evalml: قم بإلغاء تحذير sklearn UndefinedMetric من stdout (درجة F1)

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

من خلال نماذج التدريب ، أتلقى تحذيرات مثل هذه

Screen Shot 2020-03-02 at 4 54 36 PM

أنا قادر على تشغيله بشكل أكثر تحديدًا من خلال مكالمة كهذه

from evalml.objectives import F1

f1 = F1()
f1.score(y_predicted=[0, 0],
         y_true=[0, 1])

من حيث طرق التعامل. هنا ما يتبادر إلى الذهن

  1. الصمت التام أثناء عملية البحث الآلي. استبدل النتيجة بـ nan أو أسوأ نتيجة ممكنة للمقياس. ربما نقوم بعد ذلك بتخزين رسائل الخطأ في مكان ما في قاموس النتائج
  2. قم بعمل رسالة تحذير أكثر وضوحًا لا تستغرق سطورًا متعددة
enhancement

ال 6 كومينتر

نعم ، يجب أن نصلح هذا. بشكل عام ، لا ينبغي أن نسمح بطباعة أي شيء على stdout إلا إذا كان الكود الخاص بنا يفعل ذلك.

أتساءل عما إذا كان هذا مرتبطًا بالرقم 311.

أعتقد أنه يجب علينا تنفيذ كلا الاقتراحين: قم بإيقاف إخراج sklearn stdout هذا ، وكذلك كتابة رسالة التحذير الخاصة بنا إن أمكن.

christopherbunn RE لقد

christopherbunnjeremyliweishih فعلت بعض مزيد من القراءة على هذا ، وأود الإصلاح هنا أن يكون لتعيين zero_division=0.0 لكل الدقة لدينا وF1 أهداف (ثنائي وmulticlass).

تفسير
الدقة هي n_true_pos / (n_true_pos + n_false_pos) . لذلك إذا لم يتنبأ النموذج مطلقًا بتسمية معينة على الإطلاق في تقسيم البيانات المعني ، فلن يكون هناك أي إيجابيات صحيحة أو خاطئة لتلك التسمية ، وبالتالي سيكون هناك قسمة على 0. وهذا ينطبق على f1.

دعوى
لنفترض أننا نقوم بعمل جيد في موازنة فصولنا (وهو ما لا نفعله حاليًا ، ولكنه موضوع منفصل ، # 194 # 457). إذا كان الأمر كذلك ، فمن غير المرجح أن تحتوي أقسام التدريب أو التحقق من الصحة على أمثلة قليلة لفصل معين. وإذا تمكنا من افتراض ذلك ، ولا يزال النموذج لا يقدم أي تنبؤات لعلامة معينة ، فسأجادل أنه نموذج ضعيف ، وبالتالي يجب أن نعطيه أدنى درجة ممكنة ، والتي تكون 0 لكل من الدقة و f1.

يبدو جيدا؟

مثال

In [38]: import numpy as np

In [39]: import sklearn.metrics

In [40]: y_true = np.array([0, 0, 0, 0, 1])

In [41]: y_pred = np.array([0, 0, 0, 0, 0])

In [42]: sklearn.metrics.precision_score(y_true, y_pred)
/Users/dylan.sherry/.pyenv/versions/3.8.2/envs/evalml/lib/python3.8/site-packages/sklearn/metrics/_classification.py:1272: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.
  _warn_prf(average, modifier, msg_start, len(result))
Out[42]: 0.0

In [43]: sklearn.metrics.precision_score(y_true, y_pred, zero_division=0.0)
Out[43]: 0.0

dsherry أمر منطقي بالنسبة لي. أعتقد أن هذا ما نفعله الآن ولكن أيضًا مع التحذير (نظرًا لأنه يتم تعيينه افتراضيًا على "تحذير" والذي يتم تعيينه على 0 وينشر أيضًا تحذيرات)

تضمين التغريدة

احصل على هذا من christopherbunn حتى نتمكن من دمجها هذا الأسبوع بينما يخوض معركة مع نهائيات كأس العالم :)

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