Evalml: Parameter automl data_checks: cara terbaik untuk mendukung penonaktifan vs default vs kustom

Dibuat pada 23 Mei 2020  ·  10Komentar  ·  Sumber: alteryx/evalml

765 menambahkan param data_checks ke automl search . Parameter ini dimaksudkan untuk mendukung tiga opsi:

  • Nilai bawaan. Menghasilkan penggunaan kelas DefaultDataChecks .
  • Nonaktifkan fitur tersebut. Dalam dokumen desain kami, ini meminta untuk meneruskan objek EmptyDataChecks .
  • Nilai kustom. Subkelas DataChecks .

Apa yang membingungkan tentang proposal saat ini untuk mendukung ketiga opsi tersebut: memiliki nilai default menjadi None menyiratkan bahwa tidak ada pemeriksaan data yang akan berjalan, meskipun sebenarnya kita akan menggunakan DefaultDataChecks . Juga, memiliki kelas EmptyDataChecks yang merupakan noop tidak intuitif.

Kami memiliki masalah serupa di setidaknya satu area lain: #793 akan menjadikan kelas tuner sebagai parameter, yang akan memiliki nilai default/khusus (penonaktifan tidak berlaku di sana). Ini terkait karena ini adalah kasus di mana kami melewati kelas sebagai argumen input. Jadi, keputusan apa pun yang kami ambil di sini, harus berdampak pada semua situs tersebut.

enhancement

Komentar yang paling membantu

dalam situasi apa pun di mana kita mungkin melakukan sesuatu yang berbeda berdasarkan tipe data, saya pikir auto akan lebih baik daripada default . dalam kasus pemeriksaan data, kami mungkin menjalankan pemeriksaan data yang berbeda berdasarkan jenis masalah dan saya merasa auto menangkap aspek itu lebih baik daripada default yang dapat dianggap statis.

Semua 10 komentar

@angela97lin @kmax12 Saya menyukai ide-ide Anda di PR. Bermain dari itu, inilah proposal:

  • Dalam AutoSearchBase.search , ganti nama parameter data_checks ini menjadi data_checks_class , yang mendukung nilai-nilai berikut

    • Nilai default di __init__ : DefaultDataChecks

    • Dinonaktifkan: None

    • Kustom: subkelas DataChecks apa pun

  • Kemudian dalam impl, ucapkan data_checks = data_checks_class() dan lanjutkan

Bagaimana menurutmu?

Hmm, saya pikir ini adalah sesuatu yang kami pertimbangkan sebelumnya juga. Ini mengharuskan pengguna menentukan kelas DataChecks mereka sendiri, yang seharusnya tidak demikian? Kita harus mengizinkan pengguna untuk meneruskan referensi ke kelas DataCheck dasar juga, daripada memaksa mereka untuk mengimplementasikan subkelas. Misalnya, saya pikir API di atas tidak akan berfungsi dengan cuplikan kode ini:

data_check = CustomDataCheck()
data_checks = DataChecks(data_checks=[data_check])
automl.search(X, y, data_checks=data_checks)

Di sini, pengguna harus menulis sesuatu seperti:

class CustomDataChecks(DataChecks):
    def __init__(self):
        self.data_checks = [CustomDataChecks()]

automl.search(X, y, data_checks_class=CustomDataChecks)

Saya merasa seperti itu terlalu membatasi :/

(Saya kira secara lebih luas, kelas DataChecks apa pun yang memerlukan semacam parameter untuk inisialisasi tidak akan berfungsi dengan baik?)

Langkah selanjutnya: setujui rencananya. Sepertinya kita sudah dekat di sini .

Catatan: sehubungan dengan #848 (pengambil parameter default untuk komponen), @freddyaboulton dan saya baru saja berbicara tentang cara menyandikan nilai default untuk komponen. Jadi solusi apa pun yang kami temukan untuk ini mungkin berguna untuk komponen/saluran pipa juga.

@dsherry @angela97lin apa pendapat Anda tentang ide berikut?

Kita dapat mengubah tipe data dari data_checks menjadi Optional[Union[str, List[DataCheck]] . Ini merangkum tiga hal yang mungkin ingin dilakukan pengguna:

  1. Gunakan nilai default -> Lewati "default". Kami kemudian dapat memetakan ini ke DefaultDataChecks .
  2. Gunakan cek mereka sendiri -> Berikan daftar instance DataCheck . (Saya setuju dengan @angela97lin bahwa akan lebih ramah pengguna jika kita hanya membungkus daftar mereka dalam kelas DataChecks ).
  3. Jangan lakukan pemeriksaan apa pun -> Masukkan "dinonaktifkan" atau Tidak Ada. Kita dapat memetakan ini ke EmptyDataChecks secara internal.

Saya pikir kita harus mempertimbangkan untuk mengubah default kita dari None menjadi sesuatu yang lebih eksplisit seperti "default" dan hanya membiarkan parameter yang benar-benar opsional menjadi None . Sebagai contoh, sebagai pengguna, saya akan bingung bahwa pengaturan bootstrap_type=None di CatBoostClassifier sebenarnya berarti "gunakan strategi bootstrap default" sebagai lawan dari "jangan lakukan bootstrap".

@freddyaboulton itu masuk akal!

Ya, saya mulai menyukai ide untuk beralih menggunakan nilai string untuk menyandikan default daripada None . Kami memasukkan sesuatu yang serupa untuk objective dan akhirnya problem_type di init pencarian automl (#871 adalah langkah pertama)

Jadi untuk parameter data_checks ke automl search :

  • 'default' akan menentukan penggunaan DefaultDataChecks , dan akan menjadi nilai default baru
  • Kami menerima daftar instance DataCheck DataChecks (dan dalam kedua kasus tersebut impl kami dapat distandarisasi ke DataChecks sehingga kami dapat memanggil DataChecks.validate )
  • None akan menonaktifkan cek sepenuhnya

@freddyaboulton ini sejalan dengan apa yang Anda katakan, ya?

Adapun di tempat lain di basis kode: mari kita selesaikan ini awalnya hanya untuk pemeriksaan data. Tetapi jika kita menyukai polanya dan menemukannya dapat diterapkan di tempat lain, kita harus mewujudkannya.

dalam situasi apa pun di mana kita mungkin melakukan sesuatu yang berbeda berdasarkan tipe data, saya pikir auto akan lebih baik daripada default . dalam kasus pemeriksaan data, kami mungkin menjalankan pemeriksaan data yang berbeda berdasarkan jenis masalah dan saya merasa auto menangkap aspek itu lebih baik daripada default yang dapat dianggap statis.

Poin bagus!

@ kmax12 itu poin yang bagus. Untuk data_check Saya sepenuhnya setuju dengan menggunakan 'auto' untuk menandakan default.

Bagi saya, 'default' menyiratkan mengambil nilai default sedangkan 'auto' menyiratkan mungkin ada lebih banyak logika yang terjadi di belakang layar, yang membuatnya bagus untuk beberapa parameter pencarian automl.

Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

dsherry picture dsherry  ·  3Komentar

SydneyAyx picture SydneyAyx  ·  3Komentar

dsherry picture dsherry  ·  3Komentar

angela97lin picture angela97lin  ·  4Komentar

angela97lin picture angela97lin  ·  4Komentar