data_checks
ke automl search
. Parameter ini dimaksudkan untuk mendukung tiga opsi:DefaultDataChecks
.EmptyDataChecks
.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.
@angela97lin @kmax12 Saya menyukai ide-ide Anda di PR. Bermain dari itu, inilah proposal:
AutoSearchBase.search
, ganti nama parameter data_checks
ini menjadi data_checks_class
, yang mendukung nilai-nilai berikut__init__
: DefaultDataChecks
None
DataChecks
apa pundata_checks = data_checks_class()
dan lanjutkanBagaimana 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:
DefaultDataChecks
.DataCheck
. (Saya setuju dengan @angela97lin bahwa akan lebih ramah pengguna jika kita hanya membungkus daftar mereka dalam kelas DataChecks
).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 baruDataCheck
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!
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 daripadadefault
. dalam kasus pemeriksaan data, kami mungkin menjalankan pemeriksaan data yang berbeda berdasarkan jenis masalah dan saya merasaauto
menangkap aspek itu lebih baik daripadadefault
yang dapat dianggap statis.