Evalml: Mensajes de advertencia en la prueba unitaria: "valor no válido encontrado en double_scalars" y otros

Creado en 9 ene. 2020  ·  3Comentarios  ·  Fuente: alteryx/evalml

Problema
Ejecutando localmente (en Python 3.8, pero he visto algo similar en otras versiones de 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

Tres advertencias provenientes de sklearn y una proveniente de nuestro código. Parece que obtengo una combinación / orden de advertencias ligeramente diferente cada vez que ejecuto la prueba.

Más información
Aquí está la línea de la que proviene la última advertencia, en AutoBase._add_result :
high_variance_cv = (scores.std() / scores.mean()) > .2

Sospecho que scores está todo vacío o todo 0. ¿Pero por qué? Esto es lo siguiente que debemos analizar. ¿Quizás datos de prueba vacíos cuando estamos evaluando el modelo?

Mi sospecha es que este conjunto de datos es demasiado pequeño o demasiado uniforme, y que los modelos entrenados en él predicen el mismo valor o algo así. Si estoy en lo cierto, esto refuerza que necesitamos barandillas para detectar este problema cuando el usuario carga sus datos, y que burlarse de las pruebas unitarias para evitar el ajuste real (# 275) es importante (incluso si esta prueba en particular no lo es). burlarse).

Encontré estas advertencias mientras depuraba el error # 167, por lo que es posible que esto esté relacionado con eso.

Próximos pasos
Debemos determinar por qué aparecen estas advertencias. Si se trata de un problema con la configuración de la prueba, cambiemos la prueba para solucionarlo o evitarlo. De lo contrario, podría ser un error. De todos modos, no deberíamos imprimir advertencias como esta con un uso normal.

bug

Todos 3 comentarios

Esto no parece aparecer en el maestro después de que se fusionó # 445. La prueba para 3.8 se puede ver aquí . @dsherry no está muy seguro de por qué desapareció con los objetivos fusionados, pero ¿debería cerrar por ahora?

@jeremyliweishih hm, ¡raro! Sí, no veo esa advertencia en particular sobre double_scalar . Quizás # 445 barajó las pruebas unitarias de la manera correcta.

Veo esto en el trabajo de circleci al que vinculó:

=============================== 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)

Vamos a deshacernos de ellos, ¿no? Podría estar encubriendo errores.

Sugerencia para el primero: agregue "probarexcepto RuntimeWarning como e: assert False, e "en evalml/evalml/utils/gen_utils.py:98 , ejecútelo en circleci y vea dónde se rompe. Para el segundo, no estoy seguro. ¿Quizás hay una manera de hacer que las pruebas unitarias fallen si arrojan advertencias?

@dsherry @jeremyliweishih Hablé con Jeremy sobre esto, ¡pero creo que las relaciones públicas que estoy haciendo actualmente se encargan de la segunda advertencia! :) (# 638)

¿Fue útil esta página
0 / 5 - 0 calificaciones