get_objective(objective)
hanya berfungsi jika inputnya adalah Objective atau representasi snakecase.log loss binary
atau Log Loss Binary
, bahkan yang ini dari nama Objektif@gsheni Tapi bagaimana jika tujuan tidak tercantum dalam Options
(misalnya Recall
)? Apakah Anda masih ingin itu berfungsi dalam kasus itu? Alasan tidak semua tujuan terdaftar di Options
adalah karena kami tidak ingin beberapa tujuan digunakan di AutoMLSearch
.
Jadi saya pikir itu 2 hal
get_objectives --> harus mengembalikan semua Objectives di EvalML, seperti nama fungsinya.
get_automl_objectives --> harus mengembalikan Objektif yang valid untuk pencarian AutoML.
Mengerti, dan untuk memperjelas api:
def get_objectives(name: str) -> ObjectiveBase:
pass
def get_automl_objectives(name: str) -> ObjectiveBase:
pass
Dan nama dapat berupa huruf kecil, huruf besar, atau "nama resmi" ( objective.name
)
maaf maksud saya tunggal
get_objective
get_automl_objective
def get_objective(objective):
if objective is None:
raise TypeError("Objective parameter cannot be NoneType")
if isinstance(objective, ObjectiveBase):
return objective
if objective in OPTIONS:
return OPTIONS[objective]
name_to_objective = {}
for key, value in OPTIONS.items():
name_to_objective[value.name] = value
name_to_objective[value.name.lower()] = value
name_to_objective[value.name.upper()] = value
name_to_objective[key] = value
name_to_objective[key.lower()] = value
name_to_objective[key.upper()] = value
if objective in name_to_objective:
return name_to_objective[objective]
raise ObjectiveNotFoundError("Could not find the specified objective.")
Latar belakang
Ini terkait dengan #580 yang merupakan beberapa utang teknologi seputar tujuan.
Saat ini kami memiliki dua set nama untuk tujuan. Yang pertama didefinisikan dalam OPTIONS
dict global ini , yang digunakan oleh metode get_objective
/ get_objectives
untuk mengonversi input string objektif AutoMLSearch
ditentukan pengguna menjadi kelas ObjectiveBase
. Yang kedua adalah bidang name
didefinisikan di setiap kelas tujuan, seperti yang terlihat di sini .
Kami tidak membutuhkan dua set nama untuk tujuan. Ini adalah utang teknologi.
Sasaran
Usul
OPTIONS
untuk mendapatkan kuncinya dari bidang name
setiap kelas tujuan, alih-alih string kasus ular yang ditentukan secara manualAutoMLSearch
(dan mungkin juga panduan pengguna pencarian automl kami) untuk menjelaskan apa yang diperlukan untuk input "objektif" ke AutoMLSearch
Untuk pertimbangan oleh siapa pun yang mengambil ini: proposal di atas akan menyelesaikan ini. Tetapi lihat apakah Anda dapat menemukan cara untuk mencerminkan pola yang telah kita ambil dengan komponen. Di sana, kami menggunakan get_importable_subclasses
untuk mendefinisikan metode pengambil untuk semua komponen. Saya pikir kita harus menghapus OPTIONS
untuk mendukung pola ini, dan memperbarui get_objective
/ get_objectives
sesuai.
Selain itu, mungkin lebih sederhana jika kita memerlukan kecocokan kapitalisasi. Kami saat ini tidak memerlukan itu, tetapi itu adalah kerumitan yang tidak perlu dan membingungkan.
@dsherry saya bisa menerima ini! Saya suka ide menghapus Options
demi get_importable_subclasses
. Saya pikir kita perlu meneruskan flag allowed_in_automl_search
ke get_objective
untuk menjaga perilaku saat ini yang tidak mengizinkan semua tujuan digunakan di AutoMLSearch
(kecuali jika kita ingin menyingkirkan pembatasan itu).
@freddyaboulton ah poin bagus tentang itu...
Saya sarankan kita tidak menambahkan tanda untuk itu ke get_objective
. Saya pikir kita harus memasukkan logika validasi ke dalam AutoMLSearch
sebagai gantinya, di mana kita membaca dan mengurai tujuan .
if objective == 'auto':
objective = self._DEFAULT_OBJECTIVES[self.problem_type.value]
objective_obj = get_objective(objective)
self._validate_objective(objective_obj)
self.objective = objective
Jika kita melakukan validasi itu di tingkat yang lebih rendah, saya pikir itu terlalu membingungkan.