Evalml: Messages d'avertissement dans le test unitaire : "valeur invalide rencontrée dans double_scalars" et autres

Créé le 9 janv. 2020  ·  3Commentaires  ·  Source: alteryx/evalml

Problème
Exécution locale (sur python 3.8, mais j'ai vu la même chose sur d'autres versions 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

Trois avertissements venant de sklearn et un venant de notre code. Il me semble que j'obtiens une combinaison/un ordre d'avertissements légèrement différents à chaque fois que j'exécute le test.

Plus d'informations
Voici la ligne d'où provient le dernier avertissement, en AutoBase._add_result :
high_variance_cv = (scores.std() / scores.mean()) > .2

Je soupçonne que scores est tout vide ou tout 0. Mais pourquoi ? C'est la prochaine chose à examiner. Peut-être des données de test vides lorsque nous notons le modèle ?

Je soupçonne que cet ensemble de données est trop petit ou trop uniforme, et que les modèles formés dessus prédisent tous la même valeur ou quelque chose comme ça. Si j'ai raison, cela renforce le fait que nous avons besoin de garde-corps pour détecter ce problème lorsque l'utilisateur télécharge ses données, et que se moquer des tests unitaires pour éviter l'ajustement réel (#275) est important (même si ce test particulier n'est pas moqueur).

J'ai rencontré ces avertissements lors du débogage du bogue #167 , il est donc possible que cela soit lié à cela.

Prochaines étapes
Nous devons déterminer pourquoi ces avertissements apparaissent. S'il s'agit d'un problème avec la configuration du test, modifions le test pour le résoudre ou l'éviter. Sinon, ça peut être un bug. De toute façon, nous ne devrions pas imprimer des avertissements comme celui-ci dans des conditions normales d'utilisation.

bug

Tous les 3 commentaires

Cela ne semble pas apparaître dans le maître après la fusion de #445. Le test pour 3.8 peut être vu ici . @dsherry ne

@jeremyliweishih hum , bizarre ! Oui, je ne vois pas cet avertissement particulier à propos de double_scalar . Peut-être que le #445 a mélangé les tests unitaires de la bonne manière.

Je vois cela dans le travail circleci que vous avez lié :

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

Débarrassons-nous de ceux-ci, d'accord ? Peut-être couvrir des bugs.

Suggestion pour le premier : ajoutez "essayezsauf RuntimeWarning as e: assert False, e" in evalml/evalml/utils/gen_utils.py:98 , exécutez-le sur circleci et voyez où il casse. Pour le second, pas sûr. Peut-être qu'il y a un moyen de faire échouer les tests unitaires s'ils lancent des avertissements?

@dsherry @jeremyliweishih J'en ai parlé à Jeremy mais je pense que le PR que je fais actuellement s'occupe du deuxième avertissement ! :) (#638)

Cette page vous a été utile?
0 / 5 - 0 notes