Evalml: Mensagens de aviso no teste de unidade: "valor inválido encontrado em double_scalars" e outros

Criado em 9 jan. 2020  ·  3Comentários  ·  Fonte: alteryx/evalml

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.

bug

Todos 3 comentários

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 "tryexceto RuntimeWarning as e: assert False, e "em evalml/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)

Esta página foi útil?
0 / 5 - 0 avaliações