Fondo
Hoy, para obtener una canalización entrenada de automl, debe llamar a fit
en la canalización, porque automl siempre devuelve copias no capacitadas de la canalización:
automl.search(X_train, y_train)
best_pipeline = automl.best_pipeline
best_pipeline.fit(X_train, y_train)
best_pipeline.score(X_test, y_test, objectives=['MSE'])
pipeline = automl.get_pipeline(42)
pipeline.fit(X_train, y_train)
pipeline.score(X_test, y_test, objectives=['MSE'])
Desafío
Nos gustaría que sea lo más fácil posible para las personas ejecutar automl, seleccionar una canalización y usar esa canalización para iterar y depurar, generar información y desplegar en producción.
Propuesta
A corto plazo (es decir, este problema): haga que el best_pipeline
acceso
automl.search(X_train, y_train)
best_pipeline = automl.best_pipeline
best_pipeline.score(X_test, y_test, objectives=['MSE'])
Si la búsqueda automática aún no se ha ejecutado, ese descriptor de acceso debería generar un error.
Mi recomendación sobre cómo implementar esto es actualizar la búsqueda automática para que se ajuste a la mejor canalización al final y guardar una referencia a esa canalización entrenada.
¡No olvide actualizar la guía del usuario!
También hay implicaciones para las pruebas de rendimiento: deberíamos actualizar Looking Glass para registrar el tiempo de búsqueda automática y el tiempo para adaptarse a la mejor canalización por separado, porque son operaciones independientes.
Futuro
A largo plazo, me gustaría que creáramos una abstracción para mantener una referencia a los datos fuera de la llamada a search
. Esto nos permitiría hacer cosas como tener get_pipeline
return pipelines entrenados también, sin que tengamos que entrenar todos los pipelines durante la llamada a automl search
.
Entonces, el plan es agregar argumentos para X_test
y y_test
a la AutoMLSearch.search
api? ¿O cabrá en los X
y y
pasados a search
?
¿Deberíamos agregar también una bandera train_best_pipeline
a search()
o __init__
para permitir que el usuario desactive esto? Creo que sería bueno, ya que podrían agregar un tiempo y memoria adicionales significativos para una acción que el usuario podría no querer que ocurra.
@freddyaboulton Creo que debería encajar en todos los datos de entrenamiento que se proporcionaron a search
@ kmax12 buen punto, de acuerdo, podemos agregar una bandera train_best_pipeline
, por defecto True. En ese caso, TBD qué debería hacer la API si es False. Mi instinto sería simplemente hacer que best_pipeline
devuelva una tubería no capacitada, pero si alguien tiene una mejor idea, soy todo oídos. @ bchen1116 FYI
Comentario más útil
¿Deberíamos agregar también una bandera
train_best_pipeline
asearch()
o__init__
para permitir que el usuario desactive esto? Creo que sería bueno, ya que podrían agregar un tiempo y memoria adicionales significativos para una acción que el usuario podría no querer que ocurra.