Fond
Aujourd'hui, pour sortir un pipeline entraîné d'automl, vous devez appeler fit
sur le pipeline, car automl renvoie toujours des copies non entraînées du pipeline :
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'])
Défi
Nous souhaitons faciliter au maximum l'exécution d'automl, la sélection d'un pipeline et l'utilisation de ce pipeline pour itérer et déboguer, générer des informations et déployer en production.
Proposition
À court terme (c'est-à-dire ce problème) : faire en sorte que l'accesseur best_pipeline
renvoie un pipeline formé :
automl.search(X_train, y_train)
best_pipeline = automl.best_pipeline
best_pipeline.score(X_test, y_test, objectives=['MSE'])
Si la recherche automatique n'a pas encore été exécutée, cet accesseur devrait générer une erreur.
Ma recommandation pour la mise en œuvre de ceci est de mettre à jour la recherche automl pour s'adapter au meilleur pipeline à la fin et d'enregistrer une référence à ce pipeline formé.
N'oubliez pas de mettre à jour le guide d'utilisation !
Il y a également des implications pour les tests de performances : nous devons mettre à jour le miroir pour enregistrer séparément le temps de recherche automatique et le temps d'ajustement du meilleur pipeline, car ce sont des opérations indépendantes.
Futur
À long terme, j'aimerais que nous créions une abstraction pour contenir une référence aux données en dehors de l'appel à search
. Cela nous permettrait de faire des choses comme avoir get_pipeline
retour des pipelines formés, sans que nous ayons à former tous les pipelines pendant l'appel à automl search
.
Le plan est donc d'ajouter des arguments pour X_test
et y_test
à l'api AutoMLSearch.search
? Ou il tiendra sur les X
et y
passés à search
?
devrions-nous également ajouter un indicateur train_best_pipeline
à search()
ou __init__
pour permettre à l'utilisateur de désactiver cette option ? je pense que ce serait bien car ils pourraient ajouter beaucoup de temps et de mémoire supplémentaires pour une action que l'utilisateur pourrait ne pas vouloir se produire
@freddyaboulton Je pense que cela devrait tenir sur l'ensemble des données d'entraînement qui ont été fournies à search
@kmax12 bon point, d'accord, nous pouvons ajouter un drapeau train_best_pipeline
, par défaut True. Dans ce cas, à déterminer ce que l'API doit faire si elle est False. Mon instinct serait de simplement demander à best_pipeline
renvoyer un pipeline non formé, mais si quelqu'un a une meilleure idée, je suis tout ouïe. @bchen1116 Pour info
Commentaire le plus utile
devrions-nous également ajouter un indicateur
train_best_pipeline
àsearch()
ou__init__
pour permettre à l'utilisateur de désactiver cette option ? je pense que ce serait bien car ils pourraient ajouter beaucoup de temps et de mémoire supplémentaires pour une action que l'utilisateur pourrait ne pas vouloir se produire