问题
在本地运行,(在 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 后,这似乎没有出现在 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)
让我们摆脱那些,是吗? 可能是在掩盖错误。
第一个建议:添加“尝试evalml/evalml/utils/gen_utils.py:98
,在 circleci 上运行它,看看它在哪里中断。对于第二个,不确定。也许有办法让单元测试在抛出警告时失败?
@dsherry @jeremyliweishih我和 Jeremy 谈过这个问题,但我认为我目前正在做的公关处理了第二个警告! :) (#638)