Evalml: Pesan peringatan di unit test: "nilai tidak valid ditemukan di double_scalars" dan lainnya

Dibuat pada 9 Jan 2020  ·  3Komentar  ·  Sumber: alteryx/evalml

Masalah
Berjalan secara lokal, (pada python 3.8, tetapi saya telah melihat yang serupa pada versi python lainnya):

(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

Tiga peringatan datang dari sklearn dan satu datang dari kode kita. Saya sepertinya mendapatkan kombinasi/urutan peringatan yang sedikit berbeda setiap kali saya menjalankan tes.

Info lebih lanjut
Inilah baris dari mana peringatan terakhir berasal, di AutoBase._add_result :
high_variance_cv = (scores.std() / scores.mean()) > .2

Saya menduga scores semuanya kosong atau semuanya 0. Tapi kenapa? Ini adalah hal berikutnya untuk melihat ke dalam. Mungkin data uji kosong saat kita menilai model?

Kecurigaan saya adalah bahwa kumpulan data ini terlalu kecil atau terlalu seragam, dan bahwa model yang dilatih di dalamnya memprediksi semua nilai yang sama atau sesuatu seperti itu. Jika saya benar, ini memperkuat bahwa kita memerlukan pagar pengaman untuk mendeteksi masalah ini ketika pengguna mengunggah data mereka, dan bahwa mengejek dalam tes unit untuk menghindari pemasangan yang sebenarnya (#275) adalah penting (bahkan jika tes khusus ini tidak bisa diolok-olok).

Saya menemukan peringatan ini saat men-debug bug #167 , jadi mungkin ini terkait dengan itu.

Langkah selanjutnya
Kita harus menentukan mengapa peringatan ini muncul. Jika ada masalah dengan pengaturan pengujian, mari ubah pengujian untuk memperbaiki atau menghindarinya. Jika tidak, itu bisa menjadi bug. Kami seharusnya tidak mencetak peringatan seperti ini dalam penggunaan normal.

bug

Semua 3 komentar

Ini sepertinya tidak muncul di master setelah #445 digabungkan. Tes untuk 3.8 dapat dilihat di sini . @dsherry tidak terlalu yakin mengapa itu menghilang dengan tujuan digabungkan tetapi haruskah saya menutup untuk saat ini?

@jeremyliweishih hm, aneh! Ya, saya tidak melihat peringatan khusus tentang double_scalar . Mungkin #445 mengacak tes unit dengan cara yang benar.

Saya melihat ini di pekerjaan circleci yang Anda tautkan:

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

Mari kita singkirkan itu, ya? Bisa menutupi bug.

Saran untuk yang pertama: tambahkan "cobakecuali RuntimeWarning as e: assert False, e" di evalml/evalml/utils/gen_utils.py:98 , jalankan itu di circleci dan lihat di mana rusaknya. Untuk yang kedua, tidak yakin. Mungkin ada cara agar unit test gagal jika mereka memberikan peringatan?

@dsherry @jeremyliweishih Saya berbicara dengan Jeremy tentang ini, tetapi saya pikir PR yang saya lakukan saat ini menangani peringatan kedua! :) (#638)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat