Azure Machine Learning est une plateforme qui vous permet de créer facilement un modèle de machine learning avec un navigateur Web (Version officielle en février 2015. ).
Le modèle créé ici peut être appelé depuis l'API Web. Jusqu'à présent, lorsqu'il s'agissait d'intégrer l'apprentissage automatique, il était courant d'utiliser des bibliothèques telles que Python, et il était souvent nécessaire de développer sur une plate-forme différente des langages familiers, mais même avec cela, les requêtes Web Si vous pouvez l'ignorer, vous pouvez développer une application qui utilise un algorithme d'apprentissage automatique.
Cette fois, je présenterai la procédure de développement d'applications à l'aide de cet Azure Machine Learning. Ce qui suit est le schéma final du modèle créé cette fois. Je vais expliquer le long de ce flux.
Le code de ce modèle et les applications qui utilisent ce modèle sont accessibles à partir du référentiel Github ci-dessous. Cependant, comme cela sera décrit plus tard, la précision du modèle est décevante, je pense donc que ce serait amusant d'essayer de régler le vôtre.
Veuillez vous référer au Wiki du référentiel pour des liens vers des sites de référence.
Tout d'abord, décidez quelles données vous voulez former et ce que vous voulez faire. Plus précisément, concevez les entrées / sorties du modèle final et atteignez les données pour cela.
Ce que vous pouvez faire avec l'apprentissage automatique, c'est, pour le dire grosso modo, "prédiction de valeur" ou "jugement de classification". Ce n'est pas différent pour toute machine d'apprentissage complexe de type Deep Learning.
Dans de nombreux cas, il est plus efficace (empiriquement) de décider d'abord ce que vous voulez prédire / classer, puis de récupérer les données nécessaires pour voir si elles sont ouvertes au public. Cependant, comme les données ouvertes au public ne le sont pas, elles sont souvent liées par les restrictions ...
Cette fois, je vais prédire la quantité de pollen dispersée. C'est une dimension qui prédit la quantité de pollen diffusée en entrant les paramètres obtenus à partir des prévisions météorologiques et est utile pour les contre-mesures polliniques.
La quantité de pollen dispersée est publiée ci-dessous, nous allons donc l'utiliser comme données d'entraînement.
Système d'observation du pollen du ministère de l'Environnement (Hanako)
En fait, il n'y avait pas de prévisions météorologiques utilisables gratuitement, mais j'en ai trouvé une qui me fait du bien, alors je vais l'utiliser. En plus de la température, la quantité de données de diffusion comprend la vitesse et la direction du vent, mais cette API peut être utilisée pour les obtenir.
À partir de là, nous utiliserons Azure Machine Learning. Utilisez-le maintenant depuis ici. Vous pouvez créer un nouveau modèle à partir du bouton + en bas à gauche.
Commencez par charger les données.
Je pense que la source de données la plus utilisée est "URL Web via HTTP". Cette fois, j'ai poussé le fichier CSV dans le référentiel GitHub, spécifié l'adresse RAW et chargé les données.
Pour obtenir les données, ou plutôt pour exécuter le processus que vous avez créé, appuyez sur le bouton "RUN" ci-dessous. Les données doivent avoir été récupérées lorsque l'analyse a été effectuée.
L'une des caractéristiques d'Azure Machine Learning est que la fonction de visualisation des données est facile à utiliser. L'emplacement est difficile à comprendre, mais si vous cliquez avec le bouton droit sur l'emplacement suivant après l'exécution, il devrait y avoir un menu appelé «Visualiser». Lorsque vous faites cela, vous pouvez voir les informations des données acquises. Vérifions si les données peuvent être acquises correctement avec cela.
Vous pouvez également consulter les détails des informations statistiques des données en connectant les fonctions statiques. Cela sera utile pour détecter des valeurs anormales à l'avenir.
Si les données ont été chargées correctement, enregistrez les données avec "Enregistrer comme ensemble de données" dans le menu contextuel comme dans Visualiser. À mesure que vous créerez votre flux de données à l'avenir, vous devrez exécuter le processus plusieurs fois. Il est inefficace de récupérer une grande quantité de données avec une requête HTTP à chaque fois, et cela met également une charge sur la personne qui le récupère, alors enregistrez-le en tant que jeu de données et rendez-le disponible à tout moment.
Je vais résumer les points jusqu'à présent.
Comme il y a des données manquantes ou aberrantes dans les données, nous travaillerons pour les supprimer ou les remplir. C'est un processus très important, car la précision peut varier considérablement selon que vous le faites ou non.
Ce qui suit est une visualisation des données importées connectées aux statistiques descriptives des fonctions statiques.
De là, nous pouvons voir ce qui suit.
Le nombre de données de valeurs manquantes / anormales est de 82 et 4 respectivement, ce qui est assez petit par rapport à environ 30 000 au total, je vais donc les supprimer toutes cette fois. Quand j'ai vérifié la quantité de pollen dispersé, cela semblait être des données normales, alors je les ai gardées telles quelles ... mais comme la précision n'était pas si élevée, j'ai finalement fixé la limite supérieure à 1500 pour ceux de plus de 1500.
Selon M. Hanako, le fournisseur de données, cette valeur de 1 500 semble être une zone dangereuse pour plus de 1 000 pollens, j'ai donc décidé de la couper avec un nombre légèrement plus élevé. Selon les informations statistiques, le 3ème quartile de dispersion du pollen (75% quadrant, le point où 75% des données entrent du petit quasi) est 45, et on peut voir que la plupart des données sont dans la petite fourchette. La coupe ne devrait donc pas avoir beaucoup d'effet.
À ce stade, il semble préférable de diviser la quantité de pollen dispersée en grande, moyenne et petite, plutôt que de revenir, mais cette fois, le but est de créer une application à l'aide d'Azure Machine Learning. Je l'ai donc rangé et je suis passé au suivant.
Une fois que vous avez décidé d'une politique pour les données manquantes et les valeurs aberrantes, vous pouvez la mettre en œuvre.
En fait, je l'ai implémenté comme suit.
Non limité à Nettoyer les données manquantes, j'ouvre parfois le sélecteur de colonne pour le réglage de ... pour cette colonne. Vous devez faire un peu attention à la méthode de réglage ici.
Fondamentalement, il est spécifié comme "Exclure xx de toutes les colonnes" ou "Uniquement les colonnes de yy". En d'autres termes, en principe, utilisez Exclure lorsque Commencer par est Toutes les colonnes et Inclure lorsque Aucune colonne. Notez que cela n'a pas de sens d'en inclure plus dans Toutes les colonnes.
D'après le nom, j'ai pensé que Filter pouvait être utilisé pour "supprimer les données dont la colonne xx est yy ou plus", mais ce n'est pas le cas. Le filtre est utilisé pour définir les limites supérieure et inférieure de la valeur (Filtre de seuil supérieur à 1 500 définit 1 500 ou plus à 1 500). Le filtre peut être appliqué en combinant Appliquer le filtre et le filtre.
Au contraire, il n'y a actuellement personne qui puisse être utilisé pour "supprimer les données dont la colonne xx est yy ou plus" ... (Clean Missing Data fonctionne uniquement pour les valeurs manquantes), donc Python Script le gère. Je déciderai.
Le script Python transmet l'ensemble de données qu'il reçoit en tant qu'argument et renvoie l'ensemble de données à transmettre aux flux suivants en tant que valeur de retour. Le type d'argument se présente sous la forme d'une bibliothèque capable de gérer des trames de données appelées pandas. Veuillez noter que les utilisateurs de Python3 peuvent écrire 2.7 à partir de mars 2015.
Le script utilisé cette fois est le suivant. Les données de la valeur qui semble être une valeur anormale sont repoussées.
# The script MUST contain a function named azureml_main
# which is the entry point for this module.
#
# The entry point function can contain up to two input arguments:
# Param<dataframe1>: a pandas.DataFrame
# Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):
# Execution logic goes here
# print('Input pandas.DataFrame #1:\r\n\r\n{0}'.format(dataframe1))
# If a zip file is connected to the third input port is connected,
# it is unzipped under ".\Script Bundle". This directory is added
# to sys.path. Therefore, if your zip file contains a Python file
# mymodule.py you can import it using:
# import mymodule
erased = dataframe1[dataframe1.Col11 >= 0]
erased = erased[erased.Col14 > -50]
erased = erased[erased.Col16 >= 0]
# Return value must be of a sequence of pandas.DataFrame
return erased,
À ce stade, essayez d'exécuter Exécuter pour voir si Visualize traite correctement les données (par exemple, si les données manquantes ou les valeurs aberrantes ont disparu).
Plus précisément, la définition d'élément de données est la suivante.
Cette fois, nous avons nommé les éléments afin qu'ils puissent être facilement manipulés dans le processus suivant, définissez le type de données sur Flottant, définissez la quantité de diffusion du pollen sur la valeur prévue et définissez les autres fonctionnalités comme quantité de fonctionnalité. Pour ce faire, utilisez l'éditeur de métadonnées dans Transformation de données> Manipulation.
Et si vous souhaitez affiner les fonctionnalités à utiliser, réduisez les colonnes à utiliser dans Colonnes de projet de transformation de données> Manipulation. Dans le modèle, il ne suffit pas de mettre le montant de la fonctionnalité, mais fondamentalement, il est préférable de le faire avec un petit nombre de personnes d'élite qui fonctionnent bien pour la cible de prédiction. Par conséquent, même si vous souhaitez utiliser toutes les fonctionnalités, il est judicieux de placer ces colonnes de projet dans le processus afin de pouvoir ajuster le nombre de fonctionnalités que vous utiliserez plus tard.
Nous allons créer le modèle d'apprentissage automatique tant attendu. Comme vous pouvez le voir sur le fait que cela fait longtemps, la majeure partie du processus d'apprentissage automatique est également le processus de mise en forme et de traitement des données.
La section Machine Learning est divisée en quatre sections: évaluer, initialiser le modèle, évaluer et former.
Le flux de base est Initialiser le modèle> Entraîner> Score> Evaluer. Le flux consiste à initialiser le modèle, à l'entraîner, à prédire la valeur avec les données d'évaluation et à évaluer le résultat.
Dans la construction du modèle, nous sélectionnons Initialiser le modèle, et cette fois nous utilisons la régression linéaire parce que nous prédisons la valeur (en fait, nous l'avons fait sur le réseau neuronal, mais ce n'était pas très précis, nous avons donc fini par revenir à la régression linéaire).
À propos, le réseau neuronal fourni est entièrement compatible avec l'apprentissage en profondeur. Surtout sous Windows, il est difficile d'installer des bibliothèques de Deep Learning, donc si ce n'est pas une grande échelle ou si vous voulez simplement essayer différents modèles, je pense qu'il suffit de l'utiliser.
Chaque modèle a des paramètres d'initialisation et vous devez toujours savoir quelles valeurs définir. Vous pouvez également faire référence au document en bas de Propriétés, définissez donc les paramètres tout en regardant cela également.
Maintenant que nous avons le modèle et les données, nous les utiliserons pour évaluer l'apprentissage et la précision.
Tout d'abord, utilisez Data Transformation> Sample and Split> Split pour le fractionner pour l'entraînement et l'évaluation (image ci-dessous).
Je pense que vous devez normaliser les données avant l'entraînement, mais comme de nombreux modèles d'entraînement spécifient la méthode de normalisation dans le cadre de la propriété d'initialisation du modèle, il est nécessaire d'effectuer la normalisation individuellement. il n'y a pas. Lors de la prédiction d'une valeur comme celle-ci, si elle est normalisée au moment de l'apprentissage, la valeur prédite est également une valeur normalisée, donc à l'origine un calcul de restauration est nécessaire ... mais c'est également une bonne chose. Il semble. Au contraire, si vous normalisez à partir de Transformation de données> Normaliser les données, etc. et que vous ne normalisez pas dans le modèle, cette restauration ne fonctionnera probablement pas.
Le modèle de train utilisé pour l'apprentissage définit un seul élément de valeur prédite (valeur d'étiquette), et les autres éléments sont transmis au modèle en tant que quantités d'entités. Un modèle entraîné est transmis à partir du modèle de train, qui mène au modèle de score. À présent, utilisez le modèle entraîné pour prédire la valeur à partir des données d'évaluation. La différence entre les valeurs prévues et réelles est visible dans le modèle d'évaluation final. Bien sûr, vous pouvez également tout faire en même temps avec Cross Varidation.
Après avoir créé le flux, l'apprentissage et l'évaluation sont en fait effectués en exécutant le processus avec RUN comme auparavant.
C'est un résultat intéressant, mais ...
L'erreur quadratique moyenne quadratique de 146, facile à comprendre, n'est pas une très bonne nouvelle. L'écart type de la quantité de pollen dispersé après avoir repoussé la valeur aberrante est de 137,4186, et l'erreur quadratique moyenne est plus grande que cela.
Cela signifie que les valeurs prédites sont plus variables que les données d'origine, c'est-à-dire qu'elles ne sont absolument pas fiables, de sorte que les valeurs prédites par ce modèle ne sont presque pas fiables.
Si vous essayez Visualiser avec le modèle de score, vous pouvez voir la tendance plus en évidence. La figure ci-dessous est un graphique de la valeur prédite des étiquettes notées et de la valeur réelle de la dispersion du pollen (pollen). Si la précision est élevée, les deux doivent être en parfaite corrélation, donc si vous voyez une ligne propre de gauche à droite, vous pouvez bien prédire ... mais en réalité.
Au début, je pensais que cette prédiction serait facile (comme si la température est élevée, elle augmentera et s'il pleut, elle diminuera ...), mais ce n'était pas le cas. J'ai essayé de régler après cela, mais la précision ne s'est pas améliorée comme je m'y attendais, alors je l'ai mise sur l'étagère et j'ai créé un modèle décent, et j'ai commencé à me préparer à utiliser ce modèle de prédiction en tant que service Web.
Il existe les deux types de services Web suivants.
Puisque l'apprentissage est le flux que nous créons maintenant, nous pouvons en faire une API en cliquant sur le bouton "Publier le service Web" ci-dessous. En plus des données d'origine, préparez un port de réception à partir de l'API Web et une sortie pour la réponse. Les deux seront ajoutés automatiquement lorsque vous appuyez sur le bouton.
En fait, vous pouvez basculer le flux entre l'heure normale et l'accès à l'API Web, et vous pouvez changer l'heure de création du flux avec le bouton en bas à gauche.
↓ Normalement (jusqu'à présent) il était dans l'état gauche, mais si vous changez cela, il basculera lors de l'accès à l'API Web sur la droite
Pour créer une API de prédiction, appuyez sur le bouton ci-dessous.
Lorsque vous appuyez sur cette touche, un flux prédictif avec un modèle entraîné intégré ondule et est créé. Fondamentalement, le flux au moment de l'apprentissage est copié, mais comme certaines choses ne sont pas nécessaires au moment de la prédiction, créez le flux au moment de la prédiction tout en supprimant ces processus.
Cette fois, j'ai créé le flux suivant. La partie de définition d'élément suit le flux au moment de l'apprentissage, généralement en faisant circuler les données d'entrée et de test manuellement (en utilisant Entrée et sortie de données> Saisir les données), et en recevant les données POSTées lors de l'accès à l'API Web Renvoie la valeur prévue.
Après avoir créé ce flux et confirmé l'opération avec RUN, publiez le service Web avec «Publish Web Service» ainsi que l'API d'apprentissage.
Vous pouvez vérifier l'URL d'accès et la clé API à partir de la page API Web.
Vous pouvez tester l'API ici, et même inclure un exemple de code pour C # / Python / R. En utilisant cela, l'apprentissage / la prédiction peut être effectué via l'API Web.
Cette fois, comme je l'ai décidé au début, j'ai obtenu les prévisions météorologiques de l'API, j'ai prédit la quantité de diffusion de pollen en l'utilisant comme valeur d'entrée et j'ai affiché ces résultats ensemble.
pollen_prediction_by_azure/application.py
Le format de la requête HTTP est assez lourd, mais dans tous les cas, vous pouvez désormais utiliser le modèle prédictif via l'API Web.
En utilisant Azure Machine Learning, vous pouvez facilement créer un modèle et vous pourrez apprendre et effectuer des prédictions à partir de diverses plates-formes via l'API Web.
Il peut être utilisé immédiatement sans les tracas de l'installation, donc je pense que c'est une bonne plate-forme pour étudier et développer la première application d'apprentissage automatique.
Recommended Posts