Evalml: Warnmeldungen im Komponententest: "ungültiger Wert in double_scalars aufgetreten" und andere

Erstellt am 9. Jan. 2020  ·  3Kommentare  ·  Quelle: alteryx/evalml

Problem
Lokal ausgeführt (auf Python 3.8, aber ich habe ähnliches auf anderen Python-Versionen gesehen):

(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

Drei Warnungen von sklearn und eine von unserem Code. Ich scheine jedes Mal, wenn ich den Test durchführe, eine etwas andere Kombination/Reihenfolge von Warnungen zu erhalten.

Mehr Info
Hier ist die Zeile, aus der die letzte Warnung kommt, in AutoBase._add_result :
high_variance_cv = (scores.std() / scores.mean()) > .2

Ich vermute, dass scores ganz leer oder ganz 0 ist. Aber warum? Dies ist das nächste, was zu untersuchen ist. Vielleicht leere Testdaten, wenn wir das Modell bewerten?

Mein Verdacht ist, dass dieser Datensatz zu klein oder zu einheitlich ist und dass die darauf trainierten Modelle alle den gleichen Wert oder ähnliches vorhersagen. Wenn ich richtig liege, unterstreicht dies, dass wir Leitplanken benötigen, um dieses Problem zu erkennen, wenn der Benutzer seine Daten hochlädt, und dass es wichtig ist, die Komponententests zu verspotten, um eine tatsächliche Anpassung (#275) zu vermeiden (auch wenn dieser spezielle Test nicht der Fall ist). lächerlich).

Ich bin auf diese Warnungen beim Debuggen von Fehler Nr. 167 gestoßen, daher ist es möglich, dass dies damit zusammenhängt.

Nächste Schritte
Wir sollten herausfinden, warum diese Warnungen angezeigt werden. Wenn es ein Problem mit der Testeinrichtung gibt, ändern wir den Test, um ihn zu beheben oder zu vermeiden. Ansonsten könnte es ein Bug sein. Solche Warnungen sollten wir bei normalem Gebrauch sowieso nicht ausdrucken.

bug

Alle 3 Kommentare

Dies scheint im Master nach dem Einbinden von #445 nicht aufzutreten. Test für 3.8 kann hier eingesehen werden . @dsherry nicht sicher, warum es mit den zusammengeführten Zielen verschwunden ist, aber sollte ich vorerst schließen?

@jeremyliweishih hm, komisch! Ja, ich sehe diese spezielle Warnung zu double_scalar . Vielleicht hat #445 die Unit-Tests genau richtig herumgemixt.

Ich sehe dies in dem von Ihnen verlinkten Circleci-Job:

=============================== 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)

Lass uns die loswerden, ja? Könnte Fehler vertuschen.

Vorschlag für den ersten: füge "versuchen" hinzuaußer RuntimeWarning as e: assert False, e" in evalml/evalml/utils/gen_utils.py:98 , führen Sie das auf circleci aus und sehen Sie, wo es kaputt geht. Beim zweiten nicht sicher. Vielleicht gibt es eine Möglichkeit, dass Unit-Tests fehlschlagen, wenn sie Warnungen ausgeben?

@dsherry @jeremyliweishih Ich habe mit Jeremy darüber gesprochen, aber ich denke, die PR, die ich derzeit mache, kümmert sich um die zweite Warnung! :) (#638)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen