Les premiers pas avec Azure ML Studio

Nous avons précédemment expliqué comment était structuré Azure ML, et plus particulièrement Azure ML Studio.

Comme première expérience , nous vous proposons de traiter le jeu de données Iris (présenté ici) en utilisant Azure ML Studio.

Pour mémoire, ce jeu de données est l’un des jeux de données publics les plus populaires disponible sur le Machine Learning Repository. Il s’agit d’un historique recensant les dimensions (longueur des sépales, largeur des sépales, longueur des pétales, et largeur des pétales) de 150 iris et l’espèce associée à chaque iris (prédiction) :

image

Création d’une expérience

Nous allons maintenant créer une nouvelle expérience et partir à l’aventure avec Azure ML Studio :)

A ce propos, nous profitons de ce billet pour mentionner la vidéo réalisée par notre collègue Franck Mercier présentant la création d’une expérience étape par étape. N’hésitez pas à consulter cette vidéo en parallèle et complément de ce pas à pas.

Pour créer une nouvelle expérience, cliquer sur +NEW puis sur EXPERIMENT comme abordé rapidement dans le billet précédent.

image

L’interface du menu se présente comme suit.

La partie gauche présente des sections regroupant la liste des fonctions disponibles, groupées par onglets.

image

Chaque fonction peut être glissée dans l’expérience et est représentée par un bloc avec des entrées et/ou des sorties. Il est également possible de rechercher des fonctions directement en utilisant la zone de texte prévue à cet effet.

  • Saved Datasets. Données importées dans le cloud Azure ML
  • Trained Models. Modèles entraînés et sauvegardés
  • Data Format Conversions. Conversion des jeux de données avec un large choix de formats
  • Data Input and Output. Lecture et écriture des données avec un large choix de sources et de destinations
  • Data Transformation. Mise en forme des données
  • Feature Selection. Algorithmes basiques issus du Machine Learning permettant de calculer la corrélation entre les attributs et le résultat
  • Machine Learning. Création, entraînement, test et évaluation d’algorithmes d’apprentissage automatique
  • R Language Modules. Application de scripts dans le langage R
  • Statistical Functions. Application de méthodes statistiques
  • Text Analytics. Adaptation de données textuelles au Machine Learning

La fenêtre principale est la partie (centrale) où se situe l’expérience à proprement parler. Cette dernière comporte un titre, par défaut Untitled ;)

image

On y retrouve les différents blocs, dont les entrées et sorties sont reliées les unes aux autres.

image

Le bandeau droit propose dans la partie haute les propriétés contextuelles sur le bloc sélectionné, et dans la partie basse l’aide associée.

Enfin, le bandeau en bas de la fenêtre principale précise l’ensemble des commandes disponibles.

image

Dans la fenêtre principale qui va nous permettre de concevoir notre modèle, écrivons un titre à la place de Untitled, par exemple, Mes premiers pas avec Azure ML.

image

Le bandeau gauche proposent les différentes fonctions appelés modules qu’il est possible de glisser sous forme de bloc dans la fenêtre principale. Ces fonctions sont classées par thème comme nous venons de le voir.

Importation de nos données

Nous avons recensé précédemment trois principales méthodes d’importation des données :

  1. Depuis un fichier local, dans ce cas, on retrouve les données dans l’onglet Saved Datasets
  2. Depuis un espace de stockage Azure
  3. Depuis Azure HDInsight

Comme nous avons déjà détaillé ici l’importation depuis un fichier local, nous allons importer le jeu de données Iris avec une méthode générique, à savoir l’utilisation du module Reader.

Le module Reader se situe dans la section Data Input and Output. Pour l’utiliser, glisser le dans la fenêtre principale et déposer le sur le premier emplacement. Il apparaît alors sous forme de bloc. On retrouve ses paramètres sur la droite.

Dans les paramètres, spécifier que nous souhaitons importer un fichier de données présent sur le web (http).

image

Ce fichier de données est disponible à l’URL https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data et au format CSV sans en-tête.

image

En particulier, laissons notre souris quelques instants sur la sortie du module Reader. Azure ML nous précise que cette sortie est de type DATASET.

Visualisation des données

Cliquer sur RUN dans le bandeau en bas de la fenêtre principale, Azure ML exécute les modules actifs et les marque d’un signe Check.

image

Faire un clic droit et sélection Visualize. Il est alors possible de visualiser le jeu de données importé.

image

Il est également possible de visualiser la distribution de chaque caractéristique en cliquant sur une colonne particulière. Cliquer sur la colonne 3 (Col3) par exemple pour visualiser sa distribution.

image

Cliquer en haut dans la section compare to et sélectionner la colonne Col4. Nous pouvons alors visualiser s’il existe une corrélation entre la colonne 3 (Col3) et la colonne 4 (Col4).

image

Mise en forme des données

L’onglet Data Transformation permet de mettre en forme les données. Il est ainsi possible, par exemple, de remplacer les données manquantes par la moyenne de la caractéristique correspondante.

Ici, nous allons simplement partitionner le jeu de données en deux pour effectuer une validation croisée. Pour cela, glisser le module Split et connecter son entrée à la sortie du module Reader.

Ce module va renvoyer deux sous-ensembles des données d’entrée sélectionnées de manière aléatoire. Nous souhaitons avoir 70% des données d’un côté et 30% de l’autre. Modifier la valeur du paramètre Fraction en écrivant 0.7 dans la zone de texte prévue à cet effet.

imageimageimage

Création d’un modèle de Machine Learning

L’onglet Machine Learning comprend un grand nombre d’algorithmes pré-implémentés. Il est possible de modifier leurs paramètres pour optimiser leurs performances.

image

Dans cet onglet, nous allons :

  1. Choisir un modèle de classification appelé réseau neuronal grâce au module Multiclass Neural Network sous Initialize Model | Classification,
  2. L’entraîner sur le premier sous-ensemble de données avec le module Train Model sous Train,
  3. Evaluer ses performances sur le second sous-ensemble avec les modules Score Model sous Score et Evaluate Model sous Evaluate.

Initialisation du modèle

Commencer par sélectionner le module Multiclass Neural Network. Glisser ce module sur la fenêtre principale.

Cliquer une fois sur ce module; celui-ci est alors sélectionné et ses propriétés apparaissent dans le bandeau de droite où il est possible de modifier les paramètres du modèle. Nous n’y toucherons pas dans ce cadre de cet exemple et nous nous contenterons des valeurs par défaut.

image

Laisser la souris quelques instants sur la sortie du module Multiclass Neural Network. Le module renvoie un modèle non entraîné (Untrained model) dont le type est ILeanerDotNet.

image

Entrainement du modèle

Nous allons maintenant entraîner le module précédent sur les données d’entraînement à l’aide du module Train Model disponible sous Train. Pour cela, comme précédemment, glisser ce module dans l’expérience.

Il est composé de deux entrées et une sortie. Relier son entrée gauche à la sortie du module Multiclass Neural Network et son entrée droite à la sortie gauche du module Split contenant les données d’entraînement comme suit.

image

Remarquer la pastille rouge qui apparait sur le module Train Model. Ceci signifie que certains paramètres n’ont pas été renseignés. Sélectionner ce module et regarder les champs à remplir.

image

Le champ attendu est Label column, c’est-à-dire, la colonne désignant la valeur à prédire. Sélectionner-la en cliquant sur Launch column selector. Un dialogue Select a single column s’ouvre :

image

Ce dialogue est constitué de 3 champs :

  1. Include/Exclude : sélectionne/désélectionne la colonne indiquée.
  2. Column name/indice/type : permet de sélectionner une colonne par différents attributs comme son nom, sa position ou son type. Une bonne pratique consiste à prétraiter les données avec le module Metadata Editor afin d’indiquer le type (string, numeric, …) et le but (feature, label) de chaque colonne. Nous ne détaillons pas cette approche ici.
  3. Le dernier champ permet de rentrer les informations permettant de désigner la colonne à sélectionner. Il est également possible de sélectionner plusieurs colonnes en séparant les informations permettant de les identifier par des virgules.

Ici, nous souhaitons sélectionner la colonne 5 (Cold5). Sélectionner Include, column indices puis taper 5.

image

A ce stade, le schéma de l’expérience devrait être le suivant :

image

Laisser la souris quelques instant sur la sortie du module Train Model. Le module renvoie un modèle entraîné (Trained model) dont le type est ILeanerDotNet.

image

Evaluation du modèle

Il nous reste à appliquer ce modèle entraîné sur les données de test :

  1. Glisser le module Score Model sous Score.
  2. Relier son entrée gauche à la sortie de Train Model et son entrée droite au jeu de données de test issu du module Split.

En sortie du module Score Model est renvoyé le jeu de données de test, auquel a été ajoutée une colonne supplémentaire désignant le score affecté par l’application de l’algorithme.

image

Enfin, afin de tester les performances de notre algorithme, glisser le module Evaluate Model sous Evaluate et relier son entrée gauche au jeu de données issu du module Score Model.

Noter que la deuxième entrée peut être reliée à un autre jeu de données sur lequel a été appliqué un autre algorithme d’apprentissage automatique afin de comparer les performances des 2 algorithmes. L’expérience suivante est alors obtenue :

image

Cliquer sur RUN pour tester l’expérience.

On obtient ainsi le schéma suivant :

image

En sortie du module Evaluate Model, il est possible de visualiser les performances du classifieur sous forme de matrice de confusion. Pour cela, il suffit de cliquer droit à la sortie du bloc Evaluate Model et sélectionner Visualize :

imageimage

Pour plus de détails sur ce qu’est une matrice de confusion, vous pouvez vous référer à ce billet.

Mise en production

Génération du service Web

Comme nous l’avons abordé dans le cadre de billets précédents, il est possible de réutiliser le modèle entraîné en le transformant en service Web RESTful accessible depuis n’importe quelle application.

Pour crée un service Web à partir de notre modèle entraîné, il suffit d’ajouter un module Score Model (sous Machine Learning | Score) précédé d’un Project Column (sous Data Transformation | Manipulation) qui sélectionne toutes les colonnes sauf celle qui désigne la classe à prédire :

image

image

Ensuite, il faut préciser dans cette expérience quelles vont être les informations renseignées par l’utilisateur (longueur des pétales…) et quel résultat va être renvoyé par le service Web. Ici, nous souhaitons retourner les 4 caractéristiques de l’iris renseignées en sortie du module Project Column.

Pour cela, cliquer droit sur l’entrée du module Score Model reliée à la sortie du module Project Column et sélectionner Set as Publish Input.Nous souhaitons que le service Web nous applique notre algorithme entraîné sur les données renseignées. Faites un clic droit sur la sortie de module Score Model précédent et cliquer sur Set as Publish Output.

image

image

Cliquer sur RUN pour relancer l’expérience.

Tous les modules devraient se charger normalement et être annotés d’un signe vert.

Nous allons donc générer notre service Web en cliquant sur Publish Web Service dans le bandeau en-dessous de notre expérience.

Gestion du service Web

Les services Web REST ainsi créés se gèrent depuis le menu WEB SERVICES.

image

Le menu qui apparaît est composé de deux onglets :

  1. DASHBOARD où se situent les informations nécessaires à l’appel du service Web
  2. CONFIGURATION qui permet de donner des informations sur le service Web.

Dans le menu CONFIGURATION, il est possible de donner une description des champs d’entrée et des champs de sortie. Dès que toutes les informations sont rentrées, cocher YES devant READY FOR PRODUCTION pour publier le service Web.

image

Test du service Web

Intéressons-nous maintenant au menu DASHBOARD :

image

Ce menu est composé de :

  • Parent Experiment : lien qui pointe vers l’expérience qui a généré le service Web REST
  • Description : description du fonctionnement du service Web REST
  • API Key : clé utilisée pour appeler le service Web depuis l’extérieur à l’aide du protocole http
  • Aide sur l’appel du service Web dREST epuis l’extérieur

Commençons à tester notre service Web en cliquant sur Test en bas à droite de la fenêtre principale. Par exemple, un iris dont les paramètres sont (1,1,1,1) est classé Iris-setosa avec une probabilité de 0.1.

image

Appel du service Web avec .NET (Visual Studio)

Maintenant, intéressons-nous à l’appel depuis l’extérieur du service Web REST ainsi exposé. Il est possible d’appeler le service sur un élément au format JSON comme nous allons le voir, mais aussi sur des fichiers localisés dans un compte de stockage sur Microsoft Azure contenant plusieurs éléments au format JSON.

Nous allons voir comment appeler le service pour un seul élément. Cliquons sur API help page pour accéder à toute la documentation nécessaire.

image

On trouve alors de nombreuses informations sur le code qu’il faut utiliser pour appeler le service Web : url d’un point d’accès OData, url d’un point d’accès POST, clé de l’API, exemples de code…

image

Dans cette page d’aide, il est aussi donné vers la fin une partie recensant des exemples de code pour appeler le service Web. Par exemple, il est possible de copier-coller le code fourni dans Visual Studio puis de modifier les valeurs de api_key (voir l’onglet DASHBOARD section API key) et les caractéristiques de l’iris dans la chaîne de caractère data au format JSON :

image

Le code peut être exécuté dans Visual Studio par exemple :

image

Notons que le service Web REST fonctionne tout aussi bien sur des fichiers que sur des éléments unitaires, mais tout est détaillé très clairement dans l’aide ;) N’hésitez pas à la consulter.

Nous en avons terminé de nos premiers dans Azure ML Studio. Pour aller plus loin, vous pouvez consulter les tutoriels sur les différents modules d’Azure ML et des exemples d’application ici ou directement sur la page d’accueil d’Azure ML Studio.