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']
No todas las canalizaciones deben tener el mismo nombre. Los estimadores son diferentes:
[p.estimator.name for p in pipelines]
['Baseline Classifier', 'Decision Tree Classifier', 'LightGBM Classifier']
No son solo los nombres; los hiperparámetros (y sospecho que otros valores que se almacenan en la clase) también se actualizan. Esto se debe a que estamos usando la clase GeneratedPipelineBinary
y actualizando sus variables de clase. Dado que cada canalización es un GeneratedPipelineBinary
, lo actualizará para toda la clase y afectará a todas las instancias.
Creo que esto proviene del # 1400. Creo que estamos en un aprieto (juego de palabras): nuestro diseño de canalización se basa en la configuración de atributos de clase para definir las canalizaciones, lo que conduce a tener clases de canalización generadas dinámicamente como lo hacemos en la búsqueda. El problema es que estas canalizaciones no se pueden "exportar" fuera de AutoMLSearch.
Puede haber una solución fácil que estoy pasando por alto, pero creo que esto requerirá una discusión profunda sobre el diseño si queremos solucionar este problema y mantener nuestras tuberías automáticas en condiciones de encurtir.
Plan
Corto plazo: este problema rastrea la reversión del cambio de # 1400 para resolver el comportamiento defectuoso. Nuestras canalizaciones no admitirán python pickle
pero seguirán siendo serializables usando la funcionalidad existente save
/ load
que usa cloudpickle
.
A largo plazo: después de la reversión, # 1956 realiza un seguimiento para averiguar cómo deberíamos ayudar a guardar las canalizaciones de evaluación utilizando python pickle
.
Comentario más útil
Creo que esto proviene del # 1400. Creo que estamos en un aprieto (juego de palabras): nuestro diseño de canalización se basa en la configuración de atributos de clase para definir las canalizaciones, lo que conduce a tener clases de canalización generadas dinámicamente como lo hacemos en la búsqueda. El problema es que estas canalizaciones no se pueden "exportar" fuera de AutoMLSearch.
Puede haber una solución fácil que estoy pasando por alto, pero creo que esto requerirá una discusión profunda sobre el diseño si queremos solucionar este problema y mantener nuestras tuberías automáticas en condiciones de encurtir.