Evalml: AutoMLSearch get_pipeline gibt immer Pipelines mit demselben Namen zurück

Erstellt am 2. März 2021  ·  3Kommentare  ·  Quelle: alteryx/evalml

Repro:

from evalml.automl import AutoMLSearch
from evalml.demos import load_breast_cancer

X, y = load_breast_cancer()
automl = AutoMLSearch(X, y, problem_type="binary", max_batches=1)
automl.search()

pipelines = [automl.get_pipeline(i) for i in range(3)]
assert [p.name for p in pipelines] == ['LightGBM Classifier w/ Imputer', 'LightGBM Classifier w/ Imputer', 'LightGBM Classifier w/ Imputer']

Die Pipelines sollten nicht alle denselben Namen haben. Die Schätzer sind unterschiedlich:

[p.estimator.name for p in pipelines]
['Baseline Classifier', 'Decision Tree Classifier', 'LightGBM Classifier']
bug needs design

Hilfreichster Kommentar

Ich glaube, das kommt von #1400. Ich denke, wir sind in einer Zwickmühle (Wortspiel beabsichtigt) - unser Pipeline-Design basiert auf dem Festlegen von Klassenattributen, um Pipelines zu definieren, was dazu beiträgt, dynamisch generierte Pipeline-Klassen zu haben, wie wir es bei der Suche tun. Das Problem ist, dass diese Pipelines dann nicht aus AutoMLSearch "exportiert" werden können.

Es mag eine einfache Lösung geben, die ich übersehe, aber ich denke, dies erfordert eine eingehende Designdiskussion, wenn wir dies beheben und unsere Automl-Pipelines beizfähig halten möchten.

Alle 3 Kommentare

Es sind nicht nur die Namen; die Hyperparameter (und ich vermute auch andere Werte, die in der Klasse gespeichert sind) werden ebenfalls aktualisiert. Dies liegt daran, dass wir die Klasse GeneratedPipelineBinary und ihre Klassenvariablen aktualisieren. Da jede Pipeline ein GeneratedPipelineBinary , wird sie für die gesamte Klasse aktualisiert und betrifft alle Instanzen.

Ich glaube, das kommt von #1400. Ich denke, wir sind in einer Zwickmühle (Wortspiel beabsichtigt) - unser Pipeline-Design basiert auf dem Festlegen von Klassenattributen, um Pipelines zu definieren, was dazu beiträgt, dynamisch generierte Pipeline-Klassen zu haben, wie wir es bei der Suche tun. Das Problem ist, dass diese Pipelines dann nicht aus AutoMLSearch "exportiert" werden können.

Es mag eine einfache Lösung geben, die ich übersehe, aber ich denke, dies erfordert eine eingehende Designdiskussion, wenn wir dies beheben und unsere Automl-Pipelines beizfähig halten möchten.

Planen
Kurzfristig: Dieses Problem verfolgt das Zurücksetzen der Änderung von #1400, um das fehlerhafte Verhalten zu beheben. Unsere Pipelines unterstützen Python pickle aber weiterhin mit der vorhandenen save / load Funktionalität serialisierbar, die cloudpickle .

Langfristig: Nach der Wiederherstellung verfolgt #1956, wie wir das Speichern von Evalml-Pipelines mit Python pickle .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen