Problema
Executando localmente (no python 3.8, mas já vi algo semelhante em outras versões do 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
Três avisos vindos do sklearn e um vindo do nosso código. Parece que obtenho uma combinação / ordem ligeiramente diferente de avisos cada vez que executo o teste.
Mais informações
Esta é a linha de onde vem o último aviso, em AutoBase._add_result
:
high_variance_cv = (scores.std() / scores.mean()) > .2
Suspeito que scores
está totalmente vazio ou totalmente 0. Mas por quê? Essa é a próxima coisa a se examinar. Talvez dados de teste vazios quando estamos pontuando o modelo?
Minha suspeita é que este conjunto de dados é muito pequeno ou muito uniforme e que os modelos treinados nele estão prevendo todos o mesmo valor ou algo parecido. Se eu estiver certo, isso reforça que precisamos de guarda-corpos para detectar este problema quando o usuário carrega seus dados, e que simular nos testes de unidade para evitar o ajuste real (# 275) é importante (mesmo se este teste em particular não for zombável).
Eu encontrei esses avisos durante a depuração do bug nº 167, então é possível que isso esteja relacionado a isso.
Próximos passos
Devemos determinar por que esses avisos estão aparecendo. Se for um problema com a configuração do teste, vamos mudar o teste para consertar ou evitá-lo. Caso contrário, pode ser um bug. Não deveríamos imprimir avisos como este sob uso normal de qualquer maneira.
Isso não parece aparecer no master depois que # 445 foi mesclado. O teste para 3.8 pode ser visto aqui . @dsherry não sabe ao certo por que desapareceu com os objetivos incorporados, mas devo encerrar por enquanto?
@jeremyliweishih hm, estranho! Sim, não vejo esse aviso específico sobre double_scalar
. Talvez # 445 embaralhou os testes de unidade da maneira certa.
Vejo isso no trabalho do circleci ao qual você vinculou:
=============================== 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 nos livrar disso, certo? Pode estar encobrindo bugs.
Sugestão para o primeiro: adicione "tryevalml/evalml/utils/gen_utils.py:98
, execute isso no circleci e veja onde ele quebra. Para o segundo, não tenho certeza. Talvez haja uma maneira de os testes de unidade falharem se eles emitirem avisos?
@dsherry @jeremyliweishih Falei com Jeremy sobre isso, mas acho que o PR que estou fazendo atualmente cuida do segundo aviso! :) (# 638)