Evalml: Предупреждающие сообщения в модульном тесте: "обнаружено недопустимое значение в double_scalars" и другие

Созданный на 9 янв. 2020  ·  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, так что, возможно, это связано с этим.

Следующие шаги
Мы должны определить, почему появляются эти предупреждения. Если это проблема с настройкой теста, давайте изменим тест, чтобы исправить или избежать ее. В противном случае это может быть ошибка. В любом случае мы не должны распечатывать подобные предупреждения при нормальном использовании.

Все 3 Комментарий

Похоже, что это не отображается в мастере после того, как # 445 был объединен. Тест для 3.8 можно увидеть здесь . @dsherry не совсем уверен, почему он исчез с объединенными целями, но стоит ли мне сейчас закрыться?

@jeremyliweishih хм, странно! Да, я не вижу этого предупреждения о 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 как e: assert False, e "в evalml/evalml/utils/gen_utils.py:98 , запустите это на circleci и посмотрите, где он сломается. Для второго, не уверен. Может быть, есть способ, чтобы модульные тесты терпели неудачу, если они выдают предупреждения?

@dsherry @jeremyliweishih Я говорил об этом с Джереми, но я думаю, что пиар, который я сейчас делаю, позаботится о втором предупреждении! :) (# 638)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги