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からの3つの警告と、コードからの1つの警告。 テストを実行するたびに、警告の組み合わせ/順序が少し異なるようです。

より詳しい情報
ここだ最後の警告がから来ているラインはで、 AutoBase._add_result
high_variance_cv = (scores.std() / scores.mean()) > .2

scoresがすべて空か、すべて0だと思います。しかし、なぜですか? これは次に調べるべきことです。 モデルをスコアリングするときに、おそらく空のテストデータですか?

私の疑いは、このデータセットが小さすぎるか均一すぎること、そしてそれでトレーニングされたモデルがすべて同じ値またはそのようなものを予測していることです。 私が正しければ、これは、ユーザーがデータをアップロードするときにこの問題を検出するためにガードレールが必要であり、実際のフィッティング(#275)を回避するために単体テストをモックすることが重要であることを強調しています(この特定のテストがそうでない場合でも)モック可能)。

バグ#167のデバッグ中にこれらの警告が発生したため、これがそれに関連している可能性があります。

次のステップ
これらの警告が表示される理由を特定する必要があります。 テストのセットアップに問題がある場合は、テストを変更して修正または回避しましょう。 そうでなければ、それはバグである可能性があります。 とにかく、通常の使用では、このような警告を出力するべきではありません。

bug

全てのコメント3件

#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」を追加RuntimeWarning as e:assert False、e "in evalml/evalml/utils/gen_utils.py:98を除いて、circleciでそれを実行し、どこで壊れているかを確認します。2番目の場合は、わかりません。警告をスローした場合に単体テストを失敗させる方法はありますか?

@dsherry @jeremyliweishih私はこれについてジェレミーと話しましたが、私が現在行っているPRは2番目の警告の世話をしていると思います! :)(#638)

このページは役に立ちましたか?
0 / 5 - 0 評価