Evalml: Avoir automl ajuste automatiquement le meilleur pipeline sur l'ensemble des données d'entraînement

Créé le 11 déc. 2020  ·  3Commentaires  ·  Source: alteryx/evalml

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 .

enhancement

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

Tous les 3 commentaires

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

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