Проблема
Работает локально (на 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, так что, возможно, это связано с этим.
Следующие шаги
Мы должны определить, почему появляются эти предупреждения. Если это проблема с настройкой теста, давайте изменим тест, чтобы исправить или избежать ее. В противном случае это может быть ошибка. В любом случае мы не должны распечатывать подобные предупреждения при нормальном использовании.
Похоже, что это не отображается в мастере после того, как # 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)
Давай избавимся от них, да? Может скрывать ошибки.
Предложение для первого: добавить «попробоватьevalml/evalml/utils/gen_utils.py:98
, запустите это на circleci и посмотрите, где он сломается. Для второго, не уверен. Может быть, есть способ, чтобы модульные тесты терпели неудачу, если они выдают предупреждения?
@dsherry @jeremyliweishih Я говорил об этом с Джереми, но я думаю, что пиар, который я сейчас делаю, позаботится о втором предупреждении! :) (# 638)