Meilleure approche pour un projet d'apprentissage automatique de bout en bout [2022]

Publié: 2021-01-01

L'apprentissage automatique s'accélère et est une pomme de discorde depuis très longtemps. De très grands algorithmes et architectures dans ce domaine ont permis d'appliquer le concept de Machine Learning dans le monde pratique et réel.

Ce n'est plus seulement une notion de recherche et s'est propagée profondément dans des domaines d'application utiles. Et aujourd'hui, plus que jamais, il est nécessaire de maîtriser l'art du pipeline de bout en bout pour les projets d'apprentissage automatique.

Il y a un intérêt croissant pour l'apprentissage automatique pour beaucoup de gens et il existe une immense quantité de ressources disponibles qui peuvent vous aider à comprendre les principes fondamentaux du ML et de l'IA. De nombreux cours vous emmènent de l'apprentissage de certains concepts de base à la construction de modèles à la pointe de la technologie.

Mais est-ce cela ? Apprenons-nous vraiment à accéder aux données et voyons-nous vraiment comment nettoyer les données afin que notre modèle ML puisse en extraire des fonctionnalités utiles ? Et qu'en est-il de la partie déploiement ? Il y a tellement de questions sur des lignes similaires qui restent sans réponse dans nos esprits après avoir terminé ces cours et programmes.

Ce problème survient en raison d'une mauvaise compréhension d'un pipeline d'apprentissage automatique complet de bout en bout pour tout projet. Dans cet article, nous allons parcourir un tel pipeline pour comprendre ce qui doit être fait exactement afin d'obtenir de meilleurs résultats dans un scénario réel pour tout projet ML.

L'un des livres qui le montre le mieux est l'apprentissage automatique pratique avec Scikit-Learn, Keras et TensorFlow d'Aurélien Geron.

Ce pipeline de bout en bout peut être divisé en quelques étapes pour une meilleure compréhension, à savoir :

  1. Comprendre l'énoncé du problème
  2. Acquisition des données requises
  3. Comprendre les données
  4. Nettoyer les données
  5. Sélection du meilleur modèle pour la formation
  6. Réglage fin des hyperparamètres
  7. Présentation des résultats
  8. Déploiement et maintenance du système

Pour mieux comprendre le pipeline de tout projet d'apprentissage automatique réel, nous utiliserons l'exemple populaire du problème de prévision des prix de California House. Nous discuterons de tous les points ci-dessus en relation avec cet énoncé de problème. Il peut y avoir quelques modifications mineures pour différents projets, mais dans l'ensemble, l'objectif reste le même.

Table des matières

Comprendre l'énoncé du problème

Afin de construire une bonne solution, il faut comprendre très clairement l'énoncé du problème. Vous finirez très probablement par créer et former un modèle d'apprentissage automatique, mais les domaines d'application réels nécessitent bien plus que les modèles. La sortie du modèle doit correspondre à ce dont l'utilisateur final a exactement besoin.

Pour cet exemple particulier, on nous donne un ensemble de données de toutes les mesures en Californie comme la population, le revenu, les prix des logements et autres. La sortie requise par le modèle est qu'il devrait être capable de prédire le prix de la maison compte tenu de ses autres attributs tels que l'emplacement, la population, le revenu, etc.

La raison importante de cette étape est de comprendre exactement ce qui doit être fait et exactement quel type de solution est nécessaire. C'est là que se fait la partie principale du brainstorming sur la manière dont l'énoncé du problème doit être abordé.

Lire : Idées de projets d'apprentissage automatique pour les débutants

Acquisition des données requises

Une fois que vous avez clairement compris l'énoncé du problème et que vous avez décidé d'aller de l'avant avec une approche d'apprentissage automatique pour résoudre le problème, vous devez commencer à rechercher des données pertinentes. Les données sont l'ingrédient le plus important de tout projet d'apprentissage automatique. Vous devez donc rechercher et sélectionner avec soin uniquement les données de qualité. Les performances finales des modèles ML dépendent des données utilisées lors de la formation.

Il existe diverses sources pour trouver des données qui peuvent également aider à comprendre la distribution des données dans des exemples concrets. Pour notre exemple, nous pouvons prendre l'ensemble de données California House Price Prediction de Kaggle. Ces données sont au format CSV et nous utiliserons donc la bibliothèque Pandas pour charger l'ensemble de données.

Comprendre les données

C'est un aspect très important de la solution ML de pouvoir comprendre les données avec lesquelles vous travaillez. Cela nous permet de choisir les algorithmes ou les architectures de modèles les mieux adaptés au projet. Avant de commencer à examiner les données en détail, il est recommandé de diviser d'abord l'ensemble de données en ensembles d'apprentissage et de test. Cela maintient l'ensemble de test intact et diminue donc les risques de surajustement à l'ensemble de test. En procédant ainsi, vous éliminez le biais d'espionnage des données du modèle.

Il existe différentes manières de diviser les ensembles de données en ces ensembles d'apprentissage et de test. L'un d'eux est de le diviser avec une valeur de pourcentage codée en dur. 90 % de train et 10 % de test sont une valeur courante dans la plupart des cas.

Après le fractionnement, vous devrez visualiser la rame en profondeur pour comprendre les données. L'ensemble de données actuel comprend les points de latitude et de longitude et, par conséquent, il est très utile d'utiliser le nuage de points pour examiner la densité en fonction des emplacements.

Trouver la corrélation entre deux attributs dans l'ensemble de données est utile pour comprendre quels attributs sont davantage liés à l'attribut requis. Dans ce cas, nous devons déterminer quel attribut est le plus lié aux prix des logements dans l'ensemble de données. Cela peut facilement être fait dans Scikit-Learn en utilisant la méthode corr(). Il renvoie une valeur pour chaque attribut par rapport à un autre. Donc, si vous avez besoin de voir les relations par rapport aux prix des maisons, voici comment vous pouvez le faire :

corr_matrix[“median_house_value”].sort_values(ascending=False)

median_house_value 1.000000revenu_médian 0,687170total_chambres 0.135231logement_âge_médian 0,114220ménages 0,064702total_chambres 0.047865population -0,026699longitude -0.047279latitude -0.142826

Ici, il est visible que median_ income est directement lié à la valeur de la maison et d'autre part la valeur de la latitude y est indirectement liée.

Enfin, vous pouvez également essayer de faire de l'ingénierie de fonctionnalités en combinant certains attributs ensemble. Par exemple, total rooms_per_household peut être beaucoup plus informatif que le total_rooms ou les valeurs du ménage individuellement.

Nettoyer les données

Dans cette étape, vous préparez les données pour le projet Machine Learning. C'est l'étape la plus longue et la plus importante de l'ensemble du pipeline. Les performances du modèle dépendent principalement de la qualité de la préparation des données. Habituellement, c'est une bonne pratique d'écrire des fonctions à cette fin car cela vous permettra d'utiliser ces fonctions chaque fois que nécessaire et les mêmes fonctions peuvent être utilisées dans la chaîne de production pour préparer les nouvelles données pour les prédictions.

L'un des problèmes les plus rencontrés dans les données réelles est les valeurs manquantes pour quelques entrées dans l'ensemble de données. Il existe plusieurs façons de le gérer. Vous pouvez supprimer directement l'attribut entier mais ce n'est pas très bon pour le modèle. Vous pouvez vous débarrasser de la ligne qui a une valeur manquante. Une autre façon qui est principalement utilisée consiste à définir la valeur manquante sur une autre valeur comme zéro ou la moyenne arithmétique de la colonne entière s'il s'agit d'une valeur numérique.

Pour les valeurs catégorielles, il est préférable de les représenter par des nombres et de les encoder dans un encodage one-hot afin qu'il soit plus facile pour le modèle de travailler dessus. Scikit-Learn fournit également la classe OneHotEncoder afin que nous puissions facilement convertir des valeurs catégorielles en vecteurs one-hot.

Une autre chose dont vous devez vous occuper est la mise à l'échelle des fonctionnalités. Il peut y avoir des attributs dont les plages de valeurs sont très drastiques. Il est donc préférable de les mettre à l'échelle à une échelle standard afin que le modèle puisse facilement fonctionner avec ces valeurs et mieux fonctionner.

Lisez aussi à propos de: Salaire d'un ingénieur en apprentissage automatique en Inde

Sélection du meilleur modèle pour la formation

Après avoir terminé tout le nettoyage des données et l'ingénierie des fonctionnalités, la prochaine étape devient assez simple. Maintenant, tout ce que vous avez à faire est de former des modèles prometteurs sur les données et de trouver le modèle qui donne les meilleures prédictions. Il existe plusieurs façons de nous aider à sélectionner le meilleur modèle.

Notre exemple de prévision du prix des maisons en Californie est un problème de régression. Cela signifie que nous devons prédire une valeur à partir d'une plage de nombres qui est, dans ce cas, le prix de l'immobilier.

La première étape consiste à former quelques modèles et à les tester sur l'ensemble de validation. Vous ne devez pas utiliser l'ensemble de test ici car cela conduira à un surajustement de l'ensemble de test et, éventuellement, le modèle aura une régularisation très faible. Parmi ces modèles, le modèle avec une bonne précision de formation et une bonne précision de validation doit être choisi la plupart du temps. Cela peut également dépendre du cas d'utilisation, car certaines tâches nécessitent des configurations différentes des autres.

Comme nous avons déjà nettoyé les données et que les fonctions de prétraitement sont prêtes, il est très facile de former différents modèles en trois à quatre lignes de code en utilisant certains frameworks comme Scikit-Learn ou Keras. Dans Scikit-Learn, nous avons également une option de validation croisée qui aide beaucoup à trouver de bons hyperparamètres pour des modèles comme les arbres de décision.

Réglage fin des hyperparamètres

Après avoir sélectionné quelques modèles, il est nécessaire d'affiner les hyperparamètres pour libérer leur véritable potentiel. Il existe également de nombreuses façons d'y parvenir. L'une d'elles est que vous pouvez modifier manuellement les hyperparamètres et entraîner les modèles encore et encore jusqu'à obtenir un résultat satisfaisant. Ici, vous pouvez clairement voir le problème que vous ne pouvez pas vérifier autant de combinaisons qu'une tâche automatisée le ferait. Voici donc quelques bonnes méthodes pour automatiser ce genre de choses.

Grid Search est une merveilleuse fonctionnalité fournie par Scikit-Learn sous la forme d'une classe GridSearchCV où il effectue lui-même la validation croisée et trouve les valeurs d'hyperparamètres parfaites pour de meilleurs résultats. Tout ce que nous avons à faire est de mentionner avec quels hyperparamètres il doit expérimenter. C'est une fonctionnalité simple mais très puissante.

La recherche aléatoire est une autre approche qui peut être utilisée dans un but similaire. Grid Search fonctionne bien lorsqu'il y a un petit espace d'hyperparamètres à expérimenter, mais lorsqu'il y a un grand nombre d'hyperparamètres, il est préférable d'utiliser RandomizedSearchCV. Il essaie des hyperparamètres aléatoires et trouve les meilleures valeurs qu'il a vues tout au long.

Enfin et surtout, l'approche d' Ensemble Learning . Ici, nous pouvons utiliser plusieurs modèles pour donner leurs prédictions respectives et enfin, nous pouvons choisir la prédiction finale quant à la moyenne de tous. C'est une méthode très prometteuse et remporte de nombreuses compétitions sur Kaggle.

Après avoir affiné tous les hyperparamètres du modèle final, vous pouvez ensuite utiliser le modèle pour faire des prédictions sur l'ensemble de test. Ici, nous pouvons évaluer la qualité du modèle sur l'ensemble de test. N'oubliez pas que vous ne devez pas affiner votre modèle après cela pour augmenter la précision sur l'ensemble de test, car cela entraînerait un surajustement sur les échantillons de l'ensemble de test.

Présentation des résultats

Une fois le meilleur modèle sélectionné et l'évaluation effectuée, il est nécessaire d'afficher correctement les résultats. La visualisation est la clé pour réaliser de meilleurs projets d'apprentissage automatique, car il s'agit de données et de comprendre les modèles qui les sous-tendent. Les résultats numériques bruts peuvent sembler intéressants pour les personnes déjà familiarisées avec ce domaine, mais il est très important de les visualiser sur des graphiques et des diagrammes car cela rend le projet attrayant et tout le monde peut avoir une image claire de ce qui se passe réellement dans notre solution.

Déploiement et maintenance du système

La plupart des apprenants atteignent cette étape du pipeline et font face à d'énormes problèmes tout en essayant de déployer le projet pour une application dans un scénario réel. Il est assez facile de créer et d'entraîner des modèles dans un Jupyter Notebook, mais l'important est de réussir à enregistrer le modèle, puis de l'utiliser dans un environnement réel.

L'un des problèmes les plus courants rencontrés par les ingénieurs ML est qu'il existe une différence entre les données reçues en direct et les données sur lesquelles ils ont formé le modèle. Ici, nous pouvons utiliser les fonctions de prétraitement que nous avions construites lors de la création du pipeline pour former nos modèles.

Il existe deux types de modèles d'apprentissage automatique pouvant être déployés : un modèle en ligne et un modèle hors ligne. Le modèle en ligne est celui qui continue d'apprendre des données qu'il reçoit en temps réel. Les modèles hors ligne n'apprennent pas à partir de nouveaux échantillons et doivent être mis à jour et maintenus correctement s'il y a un changement dans le type de données qu'ils reçoivent. Il doit donc y avoir un entretien approprié pour les deux types de modèles.

Lors du déploiement de modèles d'apprentissage automatique, ils doivent être intégrés dans une plate-forme pour que les utilisateurs puissent facilement interagir avec eux. Les options sont larges, nous pouvons les intégrer dans une application Web, une application Android, une API Restful et bien d'autres. Une connaissance de base de la création de telles applications ou API est un énorme avantage. Vous devriez pouvoir déployer des applications NodeJS ou Python sur des services cloud tels que Google Cloud Platforms, Amazon Web Services ou Microsoft Azure.

Si vous n'êtes pas à l'aise avec certains frameworks comme Django ou Flask, vous pouvez essayer Streamlit qui permet de déployer un code python sous la forme d'une web app en quelques lignes de code supplémentaires. Il existe diverses bibliothèques et frameworks de ce type qui peuvent être explorés.

Conclusion

Pour conclure tout cet article, je dirais que les projets de Machine Learning sont assez différents des autres projets traditionnels en termes de pipeline et si vous arrivez à maîtriser ce pipeline, tout le reste devient beaucoup plus simple.

Certaines des étapes les plus importantes de ce pipeline de bout en bout que de nombreux débutants ont tendance à négliger sont le nettoyage des données et le déploiement du modèle. Si ces étapes sont respectées, le reste de la partie est comme n'importe quel autre projet.

Suivre ces étapes et avoir un pipeline défini pour les projets vous aide à avoir une vision claire des tâches, et le débogage des problèmes devient plus gérable. Je vous suggère donc de suivre ces étapes et d'essayer de mettre en œuvre votre propre projet d'apprentissage automatique de bout en bout en utilisant cette liste de contrôle. Prenez un énoncé de problème, trouvez l'ensemble de données et continuez à vous amuser sur votre projet !

Si vous souhaitez en savoir plus sur l'apprentissage automatique, consultez le diplôme PG en apprentissage automatique et IA de IIIT-B & upGrad, conçu pour les professionnels en activité et offrant plus de 450 heures de formation rigoureuse, plus de 30 études de cas et missions, IIIT- Statut B Alumni, plus de 5 projets de synthèse pratiques et aide à l'emploi avec les meilleures entreprises.

Qu'est-ce que l'apprentissage automatique ou ML ?

La capacité d'un système à apprendre une tâche sans être explicitement programmé à partir des données fournies est appelée apprentissage automatique. Ce domaine se concentre sur le développement de programmes informatiques qui peuvent accéder aux données et apprendre par eux-mêmes. C'est un sous-domaine du vaste sujet de l'intelligence artificielle (IA). L'apprentissage automatique est mis en œuvre dans presque tous les secteurs pour augmenter la productivité, le marketing, les ventes, le bonheur des clients et les bénéfices des entreprises. De nombreux informaticiens s'y sont intéressés et envisagent de changer de carrière.

Que sont les projets ML de bout en bout ?

Les projets d'apprentissage automatique de bout en bout impliquent des étapes telles que la préparation des données, la formation d'un modèle dessus et le déploiement de ce modèle. Il se compose de pipelines qui sont les moyens d'écrire le code et d'automatiser le processus de travail. Ces pipelines, lorsqu'ils sont compilés correctement, conduisent à la formation d'un projet d'apprentissage automatique réussi. Comprendre l'énoncé du problème, obtenir les données appropriées, comprendre les données, nettoyer les données, sélectionner le modèle optimal pour la formation, affiner les hyperparamètres et présenter les résultats ne sont que quelques-unes des étapes impliquées.

Que sont les hyperparamètres dans l'apprentissage automatique ?

Un hyperparamètre est un paramètre d'apprentissage automatique dont la valeur est utilisée pour influencer le processus d'apprentissage. Ils peuvent être classés en deux parties, les hyperparamètres du modèle et les hyperparamètres de l'algorithme. Les hyperparamètres de modèle ne peuvent pas être supposés tout en servant la machine à l'ensemble d'apprentissage, car ils dirigent vers la tâche de sélection de modèle. En revanche, les hyperparamètres de l'algorithme n'ont aucun effet sur les performances du modèle mais influencent la vitesse et la qualité du processus d'apprentissage. Différents hyperparamètres sont requis par différentes techniques de formation de modèles, mais il existe certains algorithmes de base qui n'ont pas besoin d'hyperparamètres.