Analyse et recommandations pour deux bibliothèques clés d'apprentissage incrémentiel

Ce blogue traite de l'apprentissage incrémentiel et du schéma de mise en œuvre, avec une comparaison empirique entre Scikit learn partial fit et River, deux bibliothèques Python populaires pour l'apprentissage en ligne.

5 minutes de lecture
Mathav Raj J
Mathav Raj J
Chef technique
5 minutes de lecture
Analyse et recommandations

Résumé :

Ce blogue explore l’apprentissage incrémentiel, le schéma ML privilégié pour les environnements de production qui ont un flux continu de données. Il donne également une brève introduction à scikit-learn partial fit et River, deux options Python populaires pour l’apprentissage incrémentiel.

Introduction :

Selon Polaris market research, l’industrie des données en flux continu, évaluée à 15,65 milliards de dollars en 2021, devrait afficher une croissance robuste avec un TCAC de 27,0 % de 2021 à 2030. Dans divers cas d’utilisation de données en flux, tels que l’orientation du trafic dans l’industrie cellulaire, les systèmes de recommandation personnalisés, et autres, des décisions en temps réel doivent être prises tout en gérant des ressources de stockage limitées. Cela nécessite un modèle incrémentiel qui apprend en continu et améliore ses connaissances en exploitant la disponibilité continue des données d’entrée. Un tel modèle affine ses paramètres à partir des connaissances réunies à partir des anciennes données, s’ajustant sans heurt aux nouvelles données à mesure que l’apprentissage progresse.

Scénarios d’application : 

  • Ressources de mémoire limitées – Lorsque l’ajustement de toutes les données en mémoire disponible n’est pas possible, l’apprentissage incrémentiel permet de diviser les données en fragments et de les ajuster un par un.
  • Dérive du modèle ou des données – Un modèle entraîné dans un environnement statique peut rencontrer des défis lors du déploiement si la distribution des données de production diffère considérablement de celle des données d’entraînement ou si la relation entre les données et la sortie change. L’apprentissage incrémentiel répond à ce problème en ayant un détecteur de dérive dans la chaîne de traitement et en déclenchant l’apprentissage sur de nouvelles données sans réajuster.
  • Données en flux continu – Pour un flux de données, l’apprentissage incrémentiel se présente comme une solution naturelle pour l’apprentissage et la prédiction en continu sans nécessairement accumuler les données et les ajuster.

Schéma d’apprentissage incrémentiel :

Un schéma typique d’apprentissage incrémentiel comprend les étapes suivantes :

  1. Premier entraînement : Un lot de données est divisé pour l’entraînement et le test. Une étape de préchauffage initial est requise avant d’utiliser toutes les données d’entraînement pour l’ajustement du modèle. Cela permet de s’assurer que les paramètres du modèle sont adéquatement corrects pour les données.
  2. Évaluation : Les données destinées au test sont évaluées et le modèle est sauvegardé.
  3. Apprentissage supplémentaire par lot : Les deux processus précédents sont répétés pour les nouvelles données collectées sur le modèle sauvegardé.
  4. Registre des modèles : Le versionnage des données permet de suivre et de stocker les modifications des modèles entraînés au fil du temps.
  5. Prédictions : Des prédictions sont générées à partir du modèle le plus récent à n’importe quelle étape après le premier entraînement.

Parmi les bibliothèques qui prennent en charge l’apprentissage incrémentiel figurent scikit-learn, scikit-multiflow, Crème, Vowpal wabbit et River. scikit-multiflow et Crème ont été fusionnés pour former River. Les sections suivantes présentent brièvement une vue d’ensemble des fonctionnalités d’apprentissage incrémentiel dans ces deux bibliothèques.

scikit-learn :

scikit-learn est l’une des bibliothèques Python les plus populaires pour le ML avec une licence BSD-3 permissive. Certaines classes de scikit-learn possèdent une méthode partial fit qui permet d’ajuster les données en lots. Elle utilise une technique d’optimisation appelée descente de gradient stochastique (SGD) dans laquelle les paramètres sont appris de façon itérative à partir d’un sous-ensemble aléatoire des données d’entraînement plutôt que de l’ensemble du jeu de données. Voici quelques fonctionnalités d’apprentissage incrémentiel dans scikit-learn :

  • Normalisation – La normalisation aligne les caractéristiques de différentes échelles sur une même échelle. Des techniques telles que la standardisation, la normalisation min-max et les mises à l’échelle max abs permettent de maintenir les statistiques en continu des données par lots. Un standard scaler est recommandé si l’on choisit d’utiliser des modèles SGD à l’étape d’entraînement.
  • Encodage catégoriel – Pour l’encodage catégoriel, il est essentiel que la caractéristique catégorielle soit codée en un nombre fixe de caractéristiques. Le feature hasher de scikit-learn joue un rôle crucial grâce à une fonction de hachage intégrée. Contrairement à d’autres méthodes d’encodage comme l’encodage one hot, le nombre de caractéristiques codées restera le même même si une nouvelle catégorie est ajoutée. Il est recommandé de fixer le nombre de caractéristiques de sortie du feature hasher à des puissances de deux pour éviter les collisions de hachage.
  • Entraînement – Des “classifieurs et régressions SGD” et “classifieurs et régressions passive-agressive” sont disponibles pour des tâches ML de base comme la régression ou la classification. Pour les tâches avancées comme la détection d’anomalies, “SGD one class SVM” (machine à vecteurs de support) est utile.

Partial fit présente les limites suivantes :

  • Batches cohérents – Chaque mini-lot doit avoir un nombre cohérent de caractéristiques, sinon cela échouera si le nombre de caractéristiques varie dans un nouveau lot.
  • Connaissance préalable des étiquettes – Dans les tâches de classification, toutes les classes de sortie lors du déploiement doivent être prédéterminées.
  • Passages multiples sur les données – Lorsque l’on traite de nombreux lots, il est possible qu’au moment où le dernier lot arrive, l’apprentissage issu du premier lot soit oublié. Il peut donc être nécessaire de passer plusieurs fois sur les données mélangées avec un faible taux d’apprentissage.

River :

River dispose d’une licence BSD-3 permissive et représente une solution complète pour la majorité des cas d’utilisation d’apprentissage incrémentiel. Ses API polyvalentes couvrent divers aspects du pipeline ML, dont l’ingestion de données, le prétraitement, l’entraînement de modèles, l’évaluation et la surveillance.

Fonctionnalités de River pertinentes pour l’apprentissage incrémentiel :

  • Forme de lot non cohérente prise en charge – Il est possible d’ajouter, de supprimer ou de permuter des caractéristiques entre les lots.
  • Robuste aux cibles – Gère les valeurs manquantes ou l’ajout de nouvelles étiquettes de cible.
  • Adaptation à la dérive – River intègre des détecteurs de dérive comme “ADWIN (ADaptive WINdowing)” et “Page Hinkley” pour surveiller la performance du modèle. Les dérives de concept surviennent lorsque la relation entre les données et la sortie change suite à un facteur externe. Cela doit être compensé par de nouvelles données qui peuvent avoir des caractéristiques additionnelles. River facilite ces modifications avec des classes comme DriftRetrainingClassifier.
  • Apprentissage unitaire et par lot – Les données peuvent être apprises une à une avec l’attribut *_one et le support pour l’apprentissage par lot est offert avec les attributs *_many.
  • Convertibilité – Des wrappers permettent également de rendre un estimateur River compatible avec scikit-learn.
  • Chaînage – Toutes les étapes de l’apprentissage incrémentiel peuvent être mises en œuvre dans un seul pipeline facilement.

Recommandations :

  • scikit-learn partial fit est plus simple à implanter pour les données numériques avec des étiquettes de classe connues et permet d’utiliser NumPy pour accélérer le traitement des données.
  • River convient mieux aux données présentant des caractéristiques incertaines, telles que les valeurs manquantes et les classes inconnues, et prend en charge plus d’algorithmes, y compris la prévision de séries temporelles et les systèmes de recommandation.
  • Le choix entre les deux dépend du cas d’utilisation spécifique et du flux de travail incrémentiel privilégié.

Référence :

  1. https://www.mathworks.com/help/stats/incremental-learning-overview.html
  2. Streaming Analytics Market Size Global Report, 2022 - 2030 (polarismarketresearch.com)
  3. Data Drift vs. Concept Drift (deepchecks.com)
  4. https://riverml.xyz/0.14.0/
  5. https://scikit-learn.org/0.15/modules/scaling_strategies.html
  6. 1.5. Stochastic Gradient Descent — scikit-learn 1.3.1 documentation
  7. python - Why does `partial_fit` in `SGDClassifier` suffer from a gradual reduction in model accuracy - Stack Overflow
  8. machine learning - How should I choose n_features in FeatureHasher in sklearn? - Data Science Stack Exchange
Etiquettes
Partager sur
ERS Génie Blogues Analyse et recommandations pour deux bibliothèques clés d'apprentissage incrémentiel