[PYTHON] Développement d'applications à l'aide d'Azure Machine Learning

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.

flow1.PNG

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.

pollen_prediction_by_azure

Veuillez vous référer au Wiki du référentiel pour des liens vers des sites de référence.

0. Préparation des données et conception du modèle

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.

OpenWeatherMap

1. Acquisition de données

À 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.

reader.PNG

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.

right_click2.PNG

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.

statistics.PNG

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.

2. Mise en forme des données

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.

data_preview.PNG

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.

data_manipulation.PNG

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.

column_selector1.PNG

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).

3. Définition des éléments de données

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.

4. Construction du modèle

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.

machines.PNG

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.

5. Apprentissage / évaluation

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).

train.PNG

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 ...

result.PNG

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é.

result2.PNG

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.

6. 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 switch_space.PNG

Pour créer une API de prédiction, appuyez sur le bouton ci-dessous.

create_scoring_model.PNG

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.

web_api_model.PNG

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.

web_api.PNG

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.

la mise en oeuvre

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

Développement d'applications à l'aide d'Azure Machine Learning
Essayez d'utiliser le bloc-notes Jupyter à partir d'Azure Machine Learning
Développement d'applications WEB à l'aide de django-development partie 1-
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Développement d'une application WEB avec Django [Django startup]
Algorithme d'apprentissage automatique (prise en charge de l'application de machine vectorielle)
Apprentissage automatique
Développement d'une application WEB avec Django [Définition de modèle]
Prévision du cours des actions à l'aide de l'apprentissage automatique (scikit-learn)
Développement d'une application WEB avec Django [Paramètre initial]
Développement d'applications WEB à l'aide de django-Construction d'environnement de développement-
[Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn
[Apprentissage automatique] Prédiction FX à l'aide de l'arbre de décision
Remarques sur l'exécution locale d'Azure Machine Learning
Développement d'une application WEB avec Django [Traitement des requêtes]
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
Développement d'une application WEB avec Django [modèle supplémentaire]
Développement d'applications à l'aide de SQLite avec Django (PTVS)
[Python] Conception d'applications Web pour l'apprentissage automatique
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
Créer un environnement de développement pour l'apprentissage automatique
[Apprentissage automatique] Analyse de régression à l'aide de scicit learn
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Développement d'une application WEB avec Django [Création de l'écran d'administration]
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
À propos du contenu de développement de l'apprentissage automatique (exemple)
[Apprentissage automatique] Extraire des mots similaires mécaniquement en utilisant WordNet
Raisonnement causal utilisant l'apprentissage automatique (organisation des méthodes de raisonnement causal)
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (1)
Résumé du didacticiel d'apprentissage automatique
Points clés de «Machine learning avec Azure ML Studio»
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Outil MALSS (application) qui prend en charge l'apprentissage automatique en Python
Régression logistique d'apprentissage automatique
Créez des projets d'apprentissage automatique à une vitesse explosive à l'aide de modèles
Machine de vecteur de support d'apprentissage automatique
[Azure] Essayez d'utiliser Azure Functions
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Apprenez en quelque sorte le machine learning
Application Web utilisant Bottle (1)
[Apprentissage automatique] Essayez de détecter des objets à l'aide de la recherche sélective
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
Mémo de construction d'environnement d'apprentissage automatique par Python
Bibliothèque d'apprentissage automatique Shogun
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (2)