Evalml: رسائل التحذير في اختبار الوحدة: "تمت مصادفة قيمة غير صالحة في double_scalars" وغيرها

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

مشكلة
يعمل محليًا ، (في Python 3.8 ، لكنني رأيت ما شابه ذلك في إصدارات Python الأخرى):

(featurelabs) ➜  evalml git:(master) pytest -v evalml/tests/automl_tests/test_autobase.py::test_pipeline_limits
====================================================================== test session starts ======================================================================
platform darwin -- Python 3.8.0, pytest-4.4.1, py-1.8.0, pluggy-0.13.1 -- /Users/dsherry/anaconda/envs/featurelabs/bin/python
cachedir: .pytest_cache
rootdir: /Users/dsherry/development/aie/featurelabs/evalml, inifile: setup.cfg
plugins: xdist-1.26.1, cov-2.6.1, nbval-0.9.3, forked-1.1.3
collected 1 item

evalml/tests/automl_tests/test_autobase.py::test_pipeline_limits PASSED       [100%]

======================================================================= warnings summary ========================================================================
evalml/tests/automl_tests/test_autobase.py::test_pipeline_limits
evalml/tests/automl_tests/test_autobase.py::test_pipeline_limits
...
  /Users/dsherry/anaconda/envs/featurelabs/lib/python3.8/site-packages/sklearn/metrics/classification.py:1436: UndefinedMetricWarning:

  Precision is ill-defined and being set to 0.0 due to no predicted samples.
...
  /Users/dsherry/anaconda/envs/featurelabs/lib/python3.8/site-packages/sklearn/metrics/classification.py:1436: UndefinedMetricWarning:

  F-score is ill-defined and being set to 0.0 due to no predicted samples.
...
  /Users/dsherry/anaconda/envs/featurelabs/lib/python3.8/site-packages/sklearn/metrics/classification.py:872: RuntimeWarning:

  invalid value encountered in double_scalars
...
  /Users/dsherry/development/aie/featurelabs/evalml/evalml/automl/auto_base.py:307: RuntimeWarning:

  invalid value encountered in double_scalars

ثلاثة تحذيرات واردة من sklearn وواحد قادم من التعليمات البرمجية الخاصة بنا. يبدو أنني أحصل على مجموعة / ترتيب مختلف قليلاً من التحذيرات في كل مرة أجري فيها الاختبار.

مزيد من المعلومات
هذا هو السطر الذي يأتي منه التحذير الأخير ، بـ AutoBase._add_result :
high_variance_cv = (scores.std() / scores.mean()) > .2

أظن أن scores كلها فارغة أو كلها 0. لكن لماذا؟ هذا هو الشيء التالي للنظر فيه. ربما بيانات اختبار فارغة عندما نسجل النموذج؟

أشك في أن مجموعة البيانات هذه صغيرة جدًا أو موحدة جدًا ، وأن النماذج التي تم تدريبها عليها تتنبأ بنفس القيمة أو شيء من هذا القبيل. إذا كنت على حق ، فهذا يؤكد أننا بحاجة إلى قضبان حماية لاكتشاف هذه المشكلة عندما يقوم المستخدم بتحميل بياناته ، وأن الاستهزاء في اختبارات الوحدة لتجنب التركيب الفعلي (# 275) مهم (حتى لو لم يكن هذا الاختبار بالذات يمكن الاستهزاء به).

لقد واجهت هذه التحذيرات أثناء تصحيح الخطأ رقم 167 ، لذلك من المحتمل أن يكون هذا مرتبطًا بذلك.

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

bug

ال 3 كومينتر

لا يبدو أن هذا يظهر بشكل رئيسي بعد دمج رقم 445. يمكن رؤية اختبار 3.8 هنا . dsherry لست متأكدًا تمامًا من سبب اختفائها مع دمج الأهداف ولكن هل يجب أن

jeremyliweishih hm ، غريب! نعم ، لا أرى هذا التحذير الخاص بشأن double_scalar . ربما قام # 445 بخلط اختبارات الوحدة بالطريقة الصحيحة تمامًا.

أرى هذا في وظيفة Circleci التي ربطتها بـ:

=============================== warnings summary ===============================
evalml/utils/gen_utils.py:98
  /home/circleci/evalml/evalml/utils/gen_utils.py:98: RuntimeWarning: invalid value encountered in true_divide
    conf_mat = conf_mat.astype('float') / conf_mat.sum(axis=0)

test_python/lib/python3.8/site-packages/numpy/core/_methods.py:38
  /home/circleci/evalml/test_python/lib/python3.8/site-packages/numpy/core/_methods.py:38: ComplexWarning: Casting complex values to real discards the imaginary part
    return umr_sum(a, axis, dtype, out, keepdims, initial, where)

دعنا نتخلص من هؤلاء ، أليس كذلك؟ يمكن أن يكون التستر على البق.

الاقتراح الأول: إضافة "حاولإلا RuntimeWarning كبريد: تأكيد الكاذبة، ه "في evalml/evalml/utils/gen_utils.py:98 ، تشغيل هذا على circleci ونرى أين فواصل لثانية واحدة، ولست متأكدا ربما هناك طريقة لجعل وحدة الاختبارات تفشل إذا كانت رمي تحذيرات.؟

dsherryjeremyliweishih تحدثت إلى جيرمي عن هذا ولكن أعتقد أن PR أفعله حاليا يعتني الإنذار الثاني! :) (# 638)

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