Evalml: AutoMLSearch: perbarui string tujuan untuk menggunakan format yang dapat dibaca manusia

Dibuat pada 19 Agu 2020  ·  9Komentar  ·  Sumber: alteryx/evalml

  • get_objective(objective) hanya berfungsi jika inputnya adalah Objective atau representasi snakecase.
  • Itu tidak berfungsi jika str objektif adalah sesuatu seperti log loss binary atau Log Loss Binary , bahkan yang ini dari nama Objektif
enhancement

Semua 9 komentar

@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

  • Saya membutuhkan cara untuk mendapatkan semua tujuan.
  • Saya perlu cara untuk beralih dari nama objektif ke Objek Python yang sebenarnya.

    • Nama bisa berupa nama huruf kecil, huruf besar, huruf kapital nama besar

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.")
  • mungkin sedikit berlebihan, tapi berhasil

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

  • Miliki satu set nama untuk tujuan kami
  • Gunakan nama yang dapat dibaca manusia. Tidak ada lagi kasus ular

Usul

  • Perbarui dict OPTIONS untuk mendapatkan kuncinya dari bidang name setiap kelas tujuan, alih-alih string kasus ular yang ditentukan secara manual
  • Perbarui referensi API AutoMLSearch (dan mungkin juga panduan pengguna pencarian automl kami) untuk menjelaskan apa yang diperlukan untuk input "objektif" ke AutoMLSearch
  • Sebutkan ini sebagai perubahan besar dalam catatan rilis kami, karena format kasus ular akan hilang

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat