Evalml: AutoMLSearch get_pipeline renvoie toujours les pipelines portant le même nom

Créé le 2 mars 2021  ·  3Commentaires  ·  Source: alteryx/evalml

Reproduction :

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']

Les pipelines ne doivent pas tous avoir le même nom. Les estimateurs sont différents :

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

Commentaire le plus utile

Je crois que cela vient de #1400 . Je pense que nous sommes dans un pétrin (jeu de mots) - notre conception de pipeline repose sur la définition d'attributs de classe pour définir des pipelines, ce qui permet d'avoir des classes de pipeline générées dynamiquement comme nous le faisons dans la recherche. Le problème est que ces pipelines ne peuvent pas être "exportés" hors d'AutoMLSearch.

Il y a peut-être une solution facile que j'oublie, mais je pense que cela nécessitera une discussion approfondie sur la conception si nous voulons résoudre ce problème et garder nos pipelines automatiques décapables.

Tous les 3 commentaires

Ce ne sont pas seulement les noms; les hyperparamètres (et je soupçonne d'autres valeurs stockées sur la classe) sont également mis à jour. C'est parce que nous utilisons la classe GeneratedPipelineBinary et mettons à jour ses variables de classe. Étant donné que chaque pipeline est un GeneratedPipelineBinary , il le mettra à jour pour toute la classe et affectera toutes les instances.

Je crois que cela vient de #1400 . Je pense que nous sommes dans un pétrin (jeu de mots) - notre conception de pipeline repose sur la définition d'attributs de classe pour définir des pipelines, ce qui permet d'avoir des classes de pipeline générées dynamiquement comme nous le faisons dans la recherche. Le problème est que ces pipelines ne peuvent pas être "exportés" hors d'AutoMLSearch.

Il y a peut-être une solution facile que j'oublie, mais je pense que cela nécessitera une discussion approfondie sur la conception si nous voulons résoudre ce problème et garder nos pipelines automatiques décapables.

Plan
À court terme : ce problème suit l'annulation du changement de #1400 pour résoudre le comportement bogué. Nos pipelines ne prendront pas en charge python pickle mais seront toujours sérialisables à l'aide de la fonctionnalité existante save / load qui utilise cloudpickle .

À long terme : après le retour, #1956 cherche à déterminer comment nous devrions prendre en charge la sauvegarde des pipelines evalml à l' aide de python pickle .

Cette page vous a été utile?
0 / 5 - 0 notes