Fermer

novembre 13, 2019

Apprentissage machine personnalisé avec ML.NET


Dans cet article, nous examinons en détail les fonctionnalités de ML.NET, le framework d’apprentissage informatisé open source de Microsoft, par rapport à Azure Cognitives Services.

ML.NET est le dernier-né de Microsoft, Microsoft, Open Source. plate-forme, framework de code d'abord pour Machine Learning. Bien que nouveau pour nous, le framework a ses racines dans Microsoft Research et a été utilisé par de nombreuses équipes internes au cours de la dernière décennie, y compris celles travaillant sur des produits dont vous avez sûrement entendu parler – Microsoft Windows, Office et Bing, pour ne citer que quelques exemples. .

ML.NET permet aux développeurs .NET d’intégrer facilement l’apprentissage automatique à leurs applications, qu’elles soient sur console, sur ordinateur ou sur le Web. Il couvre l’ensemble du cycle de vie de l’activité ML, depuis la formation et l’évaluation des modèles jusqu’à leur utilisation et leur déploiement. De nombreuses tâches typiques d'apprentissage machine supervisées et non supervisées sont prises en charge, notamment les Classification Régression Conseillers et Clustering . Le cadre s'intègre également à TensorFlow ce qui donne aux développeurs .NET la possibilité d'invoquer des modèles d'apprentissage approfondi (adaptés à des tâches telles que la détection d'objets ou l'analyse de la parole) à partir d'un environnement familier.

Pourquoi ML.NET? ] Ces jours-ci, nous n'avons que l'embarras du choix en matière d'options pour ajouter des fonctionnalités d'apprentissage automatique ou d'intelligence artificielle à nos applications. Avec un package NuGet et quelques lignes de code, nous pouvons exploiter la puissance d'Azure Cognitive Services pour effectuer des tâches complexes telles que l'analyse des sentiments, la détection d'objets et la ROC avec des niveaux élevés de précision et de performances. Microsoft a vraiment fait un travail incroyable pour rendre ces outils accessibles aux développeurs de tous niveaux d’expérience.

Comment alors ML.NET s’intègre-t-il? Vous pouvez utiliser ML.NET pour effectuer un grand nombre des mêmes types de tâches d'apprentissage machine que vous pouvez utiliser sur Azure. Cependant, en tant que framework hautement configurable et basé sur du code, il faudra certainement plus que quelques lignes de code. En ce qui concerne la différenciation, ML.NET est l'une des principales raisons suivantes:

  • Formation d'un modèle spécifique à un domaine :
    De nombreux modèles de service cognitif sont formés à de vastes ensembles de données afin de fournir une bonne expérience. pour un large éventail de cas d'utilisation. Ceci est idéal pour une utilisation en mode pick-up, ainsi que pour de nombreux besoins du monde réel. Toutefois, si vous travaillez sur un problème spécialisé, un modèle général ne convient peut-être pas aussi bien. Par exemple, Cognitive Services n'aura aucune difficulté à vous dire si une image contient un chapeau ou un animal. Si vous souhaitez détecter et distinguer différents types de chapeaux (par exemple, votre propre collection de chapeaux) sans vous soucier de la reconnaissance d'animaux ou d'autres objets, vous pouvez bénéficier de la formation de votre propre modèle spécifique à un domaine, ce que ML.NET permet. tâche facile.

  • Conservation des données sur votre réseau ou sur la machine d’un utilisateur :
    De nombreux services cognitifs vous permettent de former des modèles personnalisés, ou d’augmenter les modèles intégrés, en leur fournissant les vôtres. exemples. Dans certains cas, vos modèles peuvent également être exportés et téléchargés, ce qui permet une utilisation hors ligne. Toutefois, pour des raisons de réglementation ou de confidentialité, vous pouvez ne pas vouloir, ou être autorisé, à télécharger des données de formation ou envoyer des entrées de prédiction à un fournisseur de cloud. ML.NET peut être utilisé de bout en bout – à la fois pour l’entraînement et pour la prédiction – de manière hors ligne. Si vous avez besoin de formation et / ou de données de prévision pour rester internes, ML.NET est une option attrayante.

  • Génération dynamique de modèles ML :
    En tant que cadre de code-first, ML.NET le rend assez facile à réaliser la génération dynamique de modèles d'apprentissage automatique, basée sur des informations inconnues au moment de la compilation. Si votre application prend en charge le contenu dynamique (par exemple, les schémas définis par l'utilisateur) et que vous souhaitez intégrer les fonctionnalités ML, ML.NET est une option.

  • Modification ou extension du cadre :
    En tant que projet à code source ouvert , le code source complet de ML.NET est disponible sur GitHub, ce qui vous permet d’enquêter rapidement sur les détails de l’implémentation, de corriger les bogues ou même d’ajouter des fonctionnalités, le cas échéant. est libre d’utilisation, quel que soit le nombre d’opérations effectuées. Bien entendu, l'exploitation de vos propres systèmes a également un coût!

Le plus gros obstacle à l'accès à ces fonctionnalités différenciantes est probablement l'exigence plus élevée de connaissances en apprentissage automatique de ML.NET par rapport à Azure Cognitive Services. Pour utiliser ML.NET, vous devez réfléchir davantage aux tâches telles que le prétraitement des données, les pipelines de données, la sélection des algorithmes, la validation des modèles et les mesures de performance. Bien que la compréhension de ces concepts vous fournisse une solide formation en machine, il peut être difficile de les aborder tous en même temps. Heureusement, l'équipe de ML.NET a mis au point un outil pouvant aider les nouveaux arrivants à se lancer.

Combler les lacunes – AutoML et Model Builder

Si vous souhaitez utiliser ML.NET mais que vous souhaitez créer des pipelines, sélectionnez des formateurs. Lors de l’évaluation des modèles, vous avez réfléchi à deux fois. Il existe une option pour vous sous la forme de AutoML une bibliothèque associée à ML.NET. AutoML réduit les obstacles à l'entrée pour les nouveaux développeurs d'apprentissage automatique en automatisant certaines parties du cycle de vie et en essayant de produire un modèle d'apprentissage automatique optimal pour vos données. Plus précisément, il automatiquement:

  • Charge les données d'apprentissage à partir d'une source SQL ou textuelle

  • Effectue un prétraitement de base des données d'entrée, y compris la détection de champs catégoriels et la suppression de champs qui ne sont pas utiles à la prédiction

  • . algorithmes et paramètres potentiels, modèles de formation itératifs et évaluation de l'efficacité de chacun par rapport à vos données d'entrée

  • (lorsqu'ils sont utilisés via le CLI ou le générateur de modèles) Génère du code pour charger le modèle optimal formé, prêt à fournir de nouvelles prédictions

AutoML can être appelé à partir du code ( Install-Package Microsoft.ML.AutoML ), d'une interface de ligne de commande ( de l'outil dotnet install -g mlnet ) ou via un outil graphique sous la forme d'une interface visuelle Studio Extension, Model Builder .

Pour le reste de cet article, nous allons voir un exemple d'utilisation de Model Builder pour former automatiquement un modèle d'apprentissage automatique et générer le code pour l'utiliser. [19659021]Procédure pas à pas – Utilisation de Model Builder pour former automatiquement un modèle de prévision des tarifs de taxi

Dans cette procédure pas à pas, nous allons créer un modèle qui prédit un tarif de taxi à New York en fonction de données telles que le temps, la distance parcourue, le nombre de passagers et le mode de paiement. Nous allons utiliser les données du référentiel d'exemples ML.NET .

Conditions préalables:

Si vous ne disposez pas de Visual Studio 2017 ou 2019, installez-en un avant de tenter de l'installer. l'extension Model Builder.

Étape 1: création d'un nouveau projet dans Visual Studio

ML.NET s'exécute dans n'importe quel environnement x86 ou x64 dans lequel .NET Core s'exécute, afin que nous puissions commencer avec de nombreux modèles intégrés. . Dans ce cas, nous allons créer une nouvelle application de console .NET Core.

 01-create-netcore (002)

Une fois que vous avez créé votre projet, attendez de voir ce qui vous est familier. Projet d'application de console vide à l'écran.

Étape 2: Ajoutez un apprentissage automatique à votre projet

Une fois l'extension installée, vous pouvez appeler Model Builder en cliquant avec le bouton droit de la souris sur notre projet dans l'explorateur de solutions, puis en sélectionnant Ajouter ->. Apprentissage Machine. Vous serez ensuite accueilli par l'écran de scénario ML.NET Model Builder.

 02-clic-droit-addition-ml (002)

Étape 3: configurez le Générateur de modèle pour votre jeu de données [19659033] Scénario sélectionné

Notre interaction avec Model Builder commence par l'un des scénarios prédéfinis. Il s’agit essentiellement de modèles conçus pour des tâches d’apprentissage automatique spécifiques. Dans notre cas, nous voulons prédire les tarifs de taxi, la "prévision de prix" est donc un bon choix.

 03-select-scenario (002)

Données de formation de charge

spécifier les données que nous voulons utiliser pour la formation. La prévision des prix est un exemple de tâche d'apprentissage supervisé, dans laquelle un modèle d'apprentissage automatique est formé pour effectuer des prévisions en présentant des exemples de données historiques. Les exemples incluent à la fois les entrées du modèle (dans notre cas, des éléments tels que le temps, la distance et le nombre de passagers), ainsi que la valeur de sortie (le tarif réel pour un voyage). Plus tard, lorsque nous voulons prédire un tarif, notre modèle prend les détails de notre nouveau voyage et les utilise, conjointement avec les relations dérivées des données de formation, pour prédire un tarif.

Pour évaluer la qualité d'un billet modèle d'apprentissage automatique, nous excluons généralement une partie de nos données historiques de la formation. Cela garantit que nous disposons de bonnes combinaisons connues d'entrées / sorties (que notre modèle n'a pas encore vues) avec lesquelles nous pouvons comparer les sorties de notre modèle. AutoML utilise automatiquement une partie de nos données à cette fin, afin que nous puissions lui fournir notre jeu de données complet. Si vous avez rempli la condition préalable facultative, vous devez choisir votre jeu de données concaténé dans la boîte de dialogue Sélectionner un fichier. Sinon, vous pouvez coller l'URL pour les données d'apprentissage . L'utilisation de l'ensemble de données concaténées présente l'avantage de fournir à AutoML un corpus plus important de données d'apprentissage.

Après avoir chargé le fichier, Model Builder détecte automatiquement les colonnes et fournit un aperçu des données. Nous devons indiquer à Model Builder le champ à prédire. dans notre cas, il s'agit du champ 'fare_amount'.

 04-load-data (002)

Étape 4: générer un modèle optimal avec le constructeur de modèles

Former un modèle optimisé

Builder utilise AutoML pour explorer de manière itérative les options et déterminer l'algorithme de prédiction optimal et les paramètres d'un jeu de données donné. La limite supérieure du temps d'itération nous appartient et devrait principalement être influencée par la taille du jeu de données de formation.

L'équipe ML.NET a quelques directives sur les durées d'itération pour différentes tailles de jeu de données; pour notre ensemble de données (entre 2,5 et 5 Mo, selon que vous ayez concaténé les données de test et de train), dix secondes suffisent. Après avoir cliqué sur "Former", Model Builder commence à parcourir les modèles et à afficher quelques détails sur sa progression. Model Builder évalue chaque modèle qu'il entraîne et utilise le score R-Square du modèle comme mécanisme de comparaison.

 05-train-model (002)

Vérifiez les performances du modèle

. Model Builder fournit une vue d'ensemble du processus, y compris les paramètres d'évaluation des cinq meilleures configurations qu'il a été capable de produire au cours de la période d'itération.

 06-evalu-model (002)

Bien que modèle Builder sélectionne automatiquement le modèle avec le meilleur résultat. Cela vaut la peine de prendre un moment pour examiner les métriques finales. Si les mesures du modèle sélectionné ne sont pas bonnes, il est peu probable que les nouvelles entrées soient performantes. Dans une telle situation, vous devrez peut-être effectuer une itération sur le processus de formation type. Les options peuvent inclure:

  • Augmentation du temps d'exploration pour AutoML (lui permettre de trouver un meilleur algorithme ou paramètres)
  • Augmentation de la quantité de données d'apprentissage (fournissez plus d'exemples qui représentent mieux la variabilité de votre domaine)
  • données d'entraînement (exposer de nouvelles fonctionnalités qui pourraient augmenter la prévisibilité ou supprimer celles qui ne le pourraient pas)

Dans notre cas ci-dessus, le meilleur modèle a été produit à l'aide de l'entraîneur LightGbmRegression et a donné un score au carré R de 0,94 , qui devrait fonctionner correctement.

Étape 5: utilisation du modèle

Après l’évaluation, Model Builder ajoute automatiquement deux nouveaux projets à votre solution. La première est une bibliothèque contenant le modèle et les classes d'entrée pouvant être référencées par votre projet existant. La seconde est un exemple d'application console avec du code qui montre comment charger et utiliser le modèle.

 07-generate-sample-code (002)

Ces deux projets générés nous permettent de générer prêt à voir le modèle en action. L'exemple d'application utilise une entrée unique codée en dur de votre jeu de données d'apprentissage pour démontrer l'utilisation du modèle. Pour le rendre plus interactif, vous pouvez remplacer le contenu de Program.cs par le texte ci-dessous, ce qui vous permettra de saisir de manière interactive les détails du voyage et de recevoir le tarif prédit:

 avec  avec [System] ; 
 avec  Système .  IO ; 
 avec  Système .  Linq ; 
 avec  Microsoft . . ] ML ; 
 utilisant  PredictTaxiFareML .  Modèle .  Modéles de données ; 
 avec   statique .  Console ; 
 utilisant   statique  Système .  Environnement ; 

 d'espace de nom  PredictTaxiFareML . .  ConsoleApp
 {
     class   Programme 
     {
         privé   const   string  Quit  =   "a quitté" ; 
         privé   const   string  ModelPath  =   @ "MLModel.zip" ; 
        
         statique   void   Main  19659075] []  args ) 
         {
             var  context  =   new   MLContext  () ()  .  Modèle ; 
             var  modèle  =  contexte .  Charge  ( GetPath  ( ModelPath )   sur  _ ) ; 
             var  engine  =  du contexte .  CreatePredictionEngine  < ModelInput  ModelOutput >   ( modèle ) ; 

             WriteLin e  ( "== Prédicteur de tarif de taxi interactif AutoML ==" ) ; 
             tandis que   ( GetInput  ( de  de . var  input ) ) 
                 WriteLine  ( $  "{NewLine} Tarif prédit:"   + 
                 $  "{engine.Predict (input) .Score: C} {NewLine}" ) ; 
        } 

         private   statique   bool   GetInput [19659075] ( sur  Entrée ModelInput ) 
         {
             WriteLine  ( $  "{NewLine} Entrez les détails du voyage: {NewLine}" . ) ; 

            input  =   new   ModelInput 
             {
                Passenger_count  =   ReadF  ( "Nombre de passagers"   1 ) 
                Trip_time_in_secs  =   ReadF  ( "Temps de trajet (en minutes)"   1 )   *   60 
                Trip_distance  =   ReadF  ( "Distance (mi)"   0 ) 
                Vendor_id  =   ReadCat  ( "Vendeur"   "VTS"   "CMD" ) .
                Rate_code  =   ReadF  ( "Code de taux (0 - 6)"   0   6 ) 
                Payment_type  =   ReadCat  ( "Type de paiement"   "CRD"   "CSH" ) . ]} ; 

             return   true ; 
        } 

         private   static   float   ReadF  ( string  titre  
             float  min  =   float .  MinValue   float  max  =   float   MaxValue ) 
         {
             tandis que   ( true ) 
             {
                 try   {  return   Clamp  ( float .  Parse  ( Prompt  ( titre ) )  min  ] max ) ;  }  
                 capture   ( Exception  ex )   {  WriteLine  (1965)  ex [194590Message) ;  } 
            } 
        } 

         privé   statique   string   ReadCat  (). chaîne  titre   params   chaîne  []  valeurs ) 
         {
            title  =  $  "{title} [{StringJoin("  ", valeurs)}]; 

             var  rét  =   "" ; 
             tandis que   (!  valeurs .  contient  ( rét )  ]) 
                ret  =   Prompt  ( titre ) ; 

             return  ret ; 
        } 

         private   private   static [19659064] string   Prompt  ( string  titre ) 
         {
             Write  ( $  "- - {title}:" [19659075]) ; 
             return   ReadLine  () .  Finition  () . . . () ; 
        } 

         privé   static   float   Pince  ( float  entrée   float  min   float  max ) 
         {
             var  ret  =  Math . . Max . ( Math .  Min  ( input  max )  min ) ; 19659191] if   ( Math .  Abs  ( ret  -  input )  >   0.1 ) 
                 WriteLine  ([19459004)] $  "Clamping to {ret}" ) ; 

             return  ret ; 
        } 

         privé   statique   chaîne de caractères   ] GetPath  ( string  relativePath ) 
         {
             var  root  =   nouveau   de typeInfo  ( de type  ( Programme ) .  Assemblée .  Emplacement ) ; 
             var  asmPath  = [19459004)] root .  Répertoire .  Nom complet ; 

             return  Chemin .  Combinez  ( asmPath .  relatifPath ) ; 
        } 
    } 
} 

Ce code en action se présente comme suit:

 08-intera ctive-prediction "src =" https://d585tldpucybw.cloudfront.net/sfimages/default-source/default-album/08-interactive-prediction.gif?sfvrsn=c2c11e51_0 "data-displaymode =" Original "/></p><h2 id= ] Conclusion

Et c'est tout! Nous avons utilisé avec succès Model Builder pour générer automatiquement un modèle optimisé pour la prévision à partir de notre ensemble de données sur les tarifs de taxi. AutoML a géré automatiquement certaines des étapes les plus difficiles, nous permettant de tirer parti des fonctionnalités uniques de ML.NET sans avoir à être un expert en apprentissage automatique. Espérons que cette procédure pas à pas aide à démystifier un peu ML.NET et vous donne l’inspiration pour essayer de créer des modèles personnalisés sur certaines de vos propres données.





Source link