問題
ローカルで実行します(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からの3つの警告と、コードからの1つの警告。 テストを実行するたびに、警告の組み合わせ/順序が少し異なるようです。
より詳しい情報
ここだ最後の警告がから来ているラインはで、 AutoBase._add_result
:
high_variance_cv = (scores.std() / scores.mean()) > .2
scores
がすべて空か、すべて0だと思います。しかし、なぜですか? これは次に調べるべきことです。 モデルをスコアリングするときに、おそらく空のテストデータですか?
私の疑いは、このデータセットが小さすぎるか均一すぎること、そしてそれでトレーニングされたモデルがすべて同じ値またはそのようなものを予測していることです。 私が正しければ、これは、ユーザーがデータをアップロードするときにこの問題を検出するためにガードレールが必要であり、実際のフィッティング(#275)を回避するために単体テストをモックすることが重要であることを強調しています(この特定のテストがそうでない場合でも)モック可能)。
バグ#167のデバッグ中にこれらの警告が発生したため、これがそれに関連している可能性があります。
次のステップ
これらの警告が表示される理由を特定する必要があります。 テストのセットアップに問題がある場合は、テストを変更して修正または回避しましょう。 そうでなければ、それはバグである可能性があります。 とにかく、通常の使用では、このような警告を出力するべきではありません。
#445がマージされた後、これはマスターに表示されないようです。3.8のテストはここで見ることができ@dsherryは、目的がマージされて消えた理由がよく
@jeremyliweishih hm、変だ! ええ、 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)
それらを取り除きましょうねバグを隠蔽している可能性があります。
最初の提案:「try」を追加evalml/evalml/utils/gen_utils.py:98
を除いて、circleciでそれを実行し、どこで壊れているかを確認します。2番目の場合は、わかりません。警告をスローした場合に単体テストを失敗させる方法はありますか?
@dsherry @jeremyliweishih私はこれについてジェレミーと話しましたが、私が現在行っているPRは2番目の警告の世話をしていると思います! :)(#638)