Evalml: 单元测试中的警告消息:“在 double_scalars 中遇到无效值”等

创建于 2020-01-09  ·  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 后,这似乎没有出现在 master 中。 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 as e: assert False, e" in evalml/evalml/utils/gen_utils.py:98 ,在 circleci 上运行它,看看它在哪里中断。对于第二个,不确定。也许有办法让单元测试在抛出警告时失败?

@dsherry @jeremyliweishih我和 Jeremy 谈过这个问题,但我认为我目前正在做的公关处理了第二个警告! :) (#638)

此页面是否有帮助?
0 / 5 - 0 等级