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