Evalml: Mendukung parameterisasi pemeriksaan data; memiliki target validasi InvalidTargetDataCheck menggunakan problem_type

Dibuat pada 15 Jul 2020  ·  6Komentar  ·  Sumber: alteryx/evalml

Perbaikan #970 .

Per diskusi dengan @freddyaboulton di #929, alangkah baiknya jika kami dapat memberikan informasi tambahan ke DataChecks. Ini akan memerlukan pembaruan DataCheck API dan mempertimbangkan cara interaksinya dengan AutoML, karena kami tidak membuat instance DataChecks dan hanya meneruskan kelas DataChecks sebagai parameter ke search() .

enhancement

Komentar yang paling membantu

Anda tahu, @angela97lin @freddyaboulton mari kita gunakan masalah ini untuk melacak keduanya a) memperbarui automl dan data memeriksa API untuk mendukung parameterisasi dan b) memperbarui InvalidTargetDataCheck untuk memvalidasi target dan meningkatkan kesalahan cerdas, untuk semua target jenis yang kami dukung.

Menyebutkan karena saya baru saja mengajukan bug #970 dan melihat lebih dekat masalah ini akan diperbaiki dengan yang di atas. Jadi ini akan menutup #970.

Semua 6 komentar

@ angela97lin dapatkah Anda menjelaskan kasus penggunaan untuk ini?

@dsherry Tentu! Di #929, @freddyaboulton dan saya sedang mendiskusikan bagaimana alangkah baiknya jika InvalidTargetDataCheck bisa lebih berguna jika mengetahui jenis masalah yang ditanganinya. Misalnya, jika kita tahu bahwa masalah kita adalah klasifikasi biner tetapi input ke pemeriksaan data memiliki lebih dari dua kelas, kita dapat memberikan peringatan/kesalahan. Oleh karena itu, alangkah baiknya jika dapat meneruskan parameter entah bagaimana atau hanya lebih banyak informasi ke pemeriksaan data. Sayangnya, ini tidak bekerja dengan baik dengan desain kami saat ini, di mana kami melewati kelas dan bukan instance.

Atau, kita dapat membuat kelas pemeriksaan data untuk setiap jenis masalah, seperti BinaryClassificationInvalidTargetDataCheck tetapi ini juga bisa menjadi sangat rumit, ketika menentukan apa yang harus disertakan DefaultDataChecks (atau haruskah ini juga dipecah menjadi DefaultBinaryClassificationDataChecks?)

Baru saja berdiskusi dengan @angela97lin @freddyaboulton

Kami menyukai gagasan untuk mencerminkan pola yang kami gunakan untuk component_graph dalam pipeline:

  • Daftar pemeriksaan data awalnya dapat ditentukan untuk pencarian automl sebagai daftar subkelas DataCheck (atau sama tetapi di dalam DataChecks ), bukan instance
  • Setelah pencarian automl ingin menjalankan pemeriksaan data, itu dapat membuat instance dari kelas DataChecks
  • Pada saat itu kami akan meneruskannya data_check_parameters dict, mirip dengan pipeline kami parameters , yang berisi konfigurasi opsional untuk satu atau lebih pemeriksaan data.
  • Jika pengguna ingin menggunakan DataChecks secara langsung, mereka dapat mengikuti pola yang serupa
  • data_check_parameters harus default ke None sehingga orang tidak perlu membuatnya jika tidak diperlukan. Tetapi jika argumen yang diperlukan hilang dari pemeriksaan data (seperti problem_type untuk beberapa) yang akan menghasilkan kesalahan inisialisasi

Berikut ini sketsa tampilannya dalam pencarian automl:

# today this helper standardizes the input to a list of `DataCheck` instances, and wraps that in a `DataChecks` instance
# after this work, this would standardize the input to a `DataChecks` class.
# if `data_checks` was already a `DataChecks` class, do nothing. else if `data_checks` is a list of `DataCheck` classes, define a `AutoMLDataChecks` class to wrap and return that
data_checks_class = self._validate_data_checks(data_checks)
# next we create the `DataChecks` instance by passing in data checks parameters
data_check_parameters = {'Target Datatype Data Check': {'problem_type': self.problem_type}}
data_checks = data_checks_class(data_check_parameters)
data_check_results = data_checks.validate(X, y)

Penggunaan langsung akan terlihat serupa.

Langkah selanjutnya

  • @angela97lin @freddyaboulton yang lain mengulas sketsa di atas dan periksa kewarasannya
  • @angela97lin akan mengajukan masalah untuk melacak penambahan pemeriksaan data TargetDatatype (nama TBD), berdasarkan diskusi kami di #960 . Pemeriksaan data itu akan membutuhkan parameter problem_type untuk diteruskan
  • Siapa pun yang mengambil masalah ini juga harus mengambil masalah TargetDatatype itu pada saat yang sama dan membangun ini! ️

@dsherry Rencananya terlihat bagus bagi saya! Satu-satunya hal yang akan saya tambahkan adalah bahwa saya lebih suka menambah InvalidTargetDataCheck yang sudah ada daripada membuat pemeriksaan data baru tetapi pendekatan mana pun akan berhasil untuk saya. Siapapun yang mengambil ini, pastikan untuk memeriksa bahwa target hanya memiliki dua nilai unik ketika problem_type adalah biner. Ini disebutkan dalam ulasan untuk #929.

if problem_type == "binary" and len(set(y)) != 2:
    # Warn that we do not have two unique values in y

Anda tahu, @angela97lin @freddyaboulton mari kita gunakan masalah ini untuk melacak keduanya a) memperbarui automl dan data memeriksa API untuk mendukung parameterisasi dan b) memperbarui InvalidTargetDataCheck untuk memvalidasi target dan meningkatkan kesalahan cerdas, untuk semua target jenis yang kami dukung.

Menyebutkan karena saya baru saja mengajukan bug #970 dan melihat lebih dekat masalah ini akan diperbaiki dengan yang di atas. Jadi ini akan menutup #970.

@dsherry Betapa tepat waktu! Kedengarannya bagus untuk saya

Apakah halaman ini membantu?
0 / 5 - 0 peringkat