[PYTHON] "Première fois Kikaigakushu" que même les étudiants universitaires sans connaissances peuvent faire --AWS SageMaker

Expérience de l'écrivain

Amazon? Ah, c'est une application de vente par correspondance, je sais que je sais. Il n'y a pas si longtemps, c'était le niveau de connaissance d'Amazon. Bien sûr, je ne connaissais pas AWS.

J'ai honte en tant qu'étudiant de premier cycle. </ font>

Cependant, maintenant que je suis en troisième année d'université, j'ai découvert AWS parce que j'ai été affecté à un laboratoire. De plus, à cette époque, j'étais accro au sujet "Université YouTube d'Atsuhiko Nakata". Tout en regardant une vidéo, un service cloud appelé AWS exactement au même moment Je n'avais qu'une vague connaissance de l'existence.

☟ La vidéo dans laquelle j'en suis venu à reconnaître l'existence d'AWS, appelée cette blockchain La technologie était également très intéressante. キャプチャ.PNG [Économie] L'arme ultime à l'ère de la 5G, la "blockchain" -Partie 1-Une invention majeure qui va changer l'avenir de l'humanité! - Université YouTube d'Atsuhiko Nakata

J'ai appris à connaître AWS grâce au processus ci-dessus, et même si je n'ai aucune connaissance, je pense que je peux faire diverses choses. Utilisons-le réellement! . . . C'est devenu.

Amazon SageMaker Je voulais faire du machine learning avec AWS, alors J'ai décidé d'utiliser un service appelé Amazon SageMaker.

SageMaker est un service d'apprentissage automatique de bout en bout entièrement géré qui vient d'être annoncé et publié à re: invent 2017. Il fournit des services pour gérer le processus de développement de modèle de l'apprentissage automatique et prend en charge les parties compliquées et gênantes du processus de développement de modèle. Non seulement cela abaisse le seuil pour les ingénieurs qui cherchent à démarrer l'apprentissage automatique, mais cela permet également aux scientifiques des données, aux ingénieurs en IA et aux experts en apprentissage automatique de créer rapidement des modèles pour une formation évolutive et une libération rapide (déploiement).

En d'autres termes, Amazon SageMaker est un service qui vous permet d'effectuer facilement un apprentissage automatique </ font>. Je suis très reconnaissant envers moi-même en tant que débutant.

Présentation de SageMaker

SageMaker se compose de trois modules: «création», «formation» et «hébergement». image.png ** ** Le processus de prétraitement de l'ensemble de données. On dit que 90% de l'apprentissage automatique est le prétraitement des ensembles de données, ce qui est un processus important. Avec AWS SageMaker, Jupyter Notebook peut être facilement configuré et utilisé sur le cloud, par exemple à base de CPU ou de GPU, en fonction de la situation d'utilisation.

** ** Vous pouvez entraîner votre modèle à l'aide de l'algorithme intégré fourni par SageMaker, du framework Deep Learning et de l'environnement d'apprentissage unique fourni par Docker. Le modèle généré est enregistré dans S3. Ce modèle peut être hébergé sur SageMaker tel quel, ou il peut être retiré d'AWS et déployé sur des appareils IoT.

** <Hébergement de modèles> ** Un point de terminaison HTTPS est fourni afin que le modèle construit puisse être utilisé en temps réel.

Tutoriel SageMaker

Cela dit, la réalité n'est pas si douce que vous pouvez faire du machine learning simplement parce que vous voulez faire du machine learning d'une manière ou d'une autre!

Parce que si vous voulez faire du machine learning par vous-même ** ① Ensemble de données utilisé pour l'apprentissage automatique ** ** ② Connaissance des méthodes d'analyse et de leur environnement nécessaire à la construction du modèle ** ** ③ Connaissance de Python et des bibliothèques requises pour le prétraitement des données avant cela **

C'est parce que ce qui précède est requis. . . . . . Non, j'étais en difficulté. Bien que j'aie été enthousiaste d'essayer l'apprentissage automatique avec une sensation de légèreté, je n'ai aucune envie particulière d'analyser ce que je veux réellement analyser, et comme j'ai sauté la programmation jusqu'à présent, je n'ai presque aucune connaissance de Python.

** Mais **, SageMaker a un tutoriel, il y a un jeu de données, La bibliothèque à utiliser et la procédure d'écriture du code sont expliquées en détail.

En termes simples, Si vous utilisez SageMaker conformément au didacticiel, vous pouvez expérimenter une série de flux d'apprentissage automatique même avec 0 connaissance, et vous pouvez également apprendre l'aspect pratique de la méthode d'analyse. C'est </ font>.

Prédire les clients potentiels pour les dépôts à terme bancaires à l'aide de XGboost

Ensuite, je vous expliquerai les grandes lignes du tutoriel qui sera effectivement réalisé cette fois.

Tutoriel utilisé cette fois (publié sur GitHub) ☟ Targeting Direct Marketing with Amazon SageMaker XGBoost

Ce tutoriel est entièrement écrit en anglais, mais certaines personnes font ce tutoriel en japonais, donc je me réfère également à cette page. ☟ Prédire les clients potentiels pour les dépôts à terme bancaires à l'aide d'Amazon SageMaker [SageMaker + XGBoost Machine Learning Beginner Tutorial] -codExa

L'ensemble de données utilisé cette fois est le résultat du marketing direct d'épargne régulière par téléphone par une banque au Portugal. Il existe des données telles que l'âge, la profession et la formation de chaque utilisateur, et à la suite du marketing direct, ceux qui ont demandé un dépôt fixe (étiquette = 1), ceux qui n'ont pas postulé (étiquette = 0) ) Est donnée.

Si vous êtes un ingénieur en apprentissage automatique, cela semble être un ensemble de données très célèbre pour les débutants que vous entendrez une fois? (Bien sûr, je le savais pour la première fois.)

Cet ensemble de données est analysé à l'aide d'une méthode d'apprentissage appelée XGboost pour prédire si le marketing direct aux clients sera un succès. Ensuite, le flux général de ce didacticiel consiste à comparer le résultat de la prédiction avec les données réelles et à vérifier la précision de la prédiction.

Vue d'ensemble de XG boost

Cette fois, je vais vous expliquer les grandes lignes de la méthode d'analyse «XG boost» utilisée lors de la construction d'un modèle.

XGBoost est une implémentation open source bien connue et efficace de l'algorithme d'arbre de boost de gradient. L'amplification de gradient est un algorithme d'apprentissage supervisé qui tente de prédire avec précision les variables cibles en combinant un ensemble d'estimations à partir d'un ensemble plus simple de modèles plus faibles. XGBoost a connu un grand succès dans les compétitions d'apprentissage automatique telles que kaggle, car il peut gérer de manière robuste un grand nombre d'hyperparamètres pouvant être commutés et ajustés pour s'adapter à différents types de données, relations de confiance, distributions et besoins.

En bref, XGboost est la méthode d'apprentissage supervisé la plus puissante! Je l'ai interprété comme tel. Récemment, il semble que la méthode d'apprentissage appelée LightGBM perd le titre ... w

Qu'est-ce que l'apprentissage supervisé? Présentation d'autres méthodes d'apprentissage

Plus tôt, XGboost a dit qu'il apprenait avec un enseignant, mais je ne suis pas sûr d '«apprendre avec un professeur», alors j'ai fait un peu de recherche.

Il existe trois méthodes d'apprentissage automatique: «apprentissage supervisé», «apprentissage non supervisé» et «apprentissage amélioré».

** <Apprendre avec l'enseignant> **

L'apprentissage supervisé est une méthode dans laquelle un ordinateur apprend à l'aide d'un modèle d'apprentissage construit à partir de données pour lesquelles des étiquettes et des valeurs numériques correctes sont connues. C'est la méthode d'apprentissage la plus simple de l'apprentissage automatique, et elle se caractérise par le fait qu'il est facile d'obtenir des résultats proches des prédictions faites par les humains en matière de classification et de prédiction. Les exemples d'utilisation comprennent les prévisions de marché dans les transactions et les estimations des clients qui achètent souvent leurs produits.

** **

L'apprentissage non supervisé est une méthode d'apprentissage qui trouve des groupes avec des caractéristiques communes et extrait les informations qui caractérisent les données à partir des données d'entrée qui n'ont pas d'étiquette de réponse correcte. Le clustering est un cas d'utilisation typique. Le clustering trouve automatiquement les données ayant des caractéristiques similaires à partir des données et les divise en plusieurs types de groupes.

** <Renforcer l'apprentissage> **

Contrairement à l'apprentissage supervisé et à l'apprentissage non supervisé, l'apprentissage intensif est une méthode pour trouver le jugement optimal tout en agissant réellement sur une tâche qui prend du temps à produire des résultats ou qui nécessite un grand nombre de répétitions. Il est utilisé pour la conduite automatique des automobiles, le contrôle des robots et des jeux tels que AlphaGo.

<Références> Quelles sont les trois méthodes d'apprentissage du «machine learning» (apprentissage supervisé, apprentissage non supervisé et apprentissage amélioré)? - magazine Sweeep

Flux réel du didacticiel SageMaker

L'introduction est devenue longue, mais je vais vous expliquer comment procéder concrètement à l'analyse à partir d'ici.

Le compte AWS Educate Starter a été adopté comme compte AWS requis pour utiliser SageMaker. L'utilisation des services AWS est essentiellement payante. Cependant, le compte AWS Educate Starter reçoit des crédits de plusieurs dizaines de dollars par défaut, vous pouvez donc utiliser les services AWS pratiquement gratuitement pendant un certain temps. C'est un très beau privilège pour l'auteur, qui est un pauvre étudiant. Cependant, il existe divers services qui ne peuvent pas être utilisés en raison de nombreuses réglementations, alors soyez prudent. Les détails seront décrits plus tard. De plus, concernant le flux d'analyse décrit cette fois, je décrirai en détail la partie où l'auteur a échoué et est resté bloqué, et expliquerai la procédure de solution. À l'avenir, j'aimerais que cet article soit utilisé comme un dépannage pour ceux qui touchent SageMaker avec un compte AWS Educate Starter ainsi que moi-même.

Tout d'abord, une brève explication de la procédure d'analyse est la suivante.

** ⓪ Ouvrez l'écran AWS Management Console ① Créer un compartiment Amazon S3 ② Créer une instance de notebook Amazon SageMaker ③ Créez un notebook Jupyter ④ Téléchargez, sondez et convertissez les données d'entraînement ⑤ Former le modèle ⑥ Hébergement de modèles ⑦ Vérifiez le modèle **

Ensuite, j'expliquerai chaque procédure en détail. Cela fait très longtemps, alors j'espère que vous allez y jeter un coup d'œil.

⓪ Ouvrez l'écran AWS Management Console (ceci est étonnamment important)

Tout d'abord, connectez-vous à votre compte AWS Educate et cliquez sur «Compte AWS» en haut à gauche pour passer à l'écran ci-dessous. Capture 1.PNG Après cela, lorsque vous démarrez AWS Console selon les instructions à l'écran, l'écran «AWS Management Console» s'ouvre comme indiqué ci-dessous.

Recherchez «Rechercher des services» et spécifiez le service que vous souhaitez utiliser. Cette fois, nous utiliserons "S3" et "Amazon Sage Maker". キャプチャ.PNG . . . . . Si un débutant se porte bien, cela se produira, mais comme mentionné ci-dessus, les services qui peuvent être utilisés avec le "AWS Educate Starter Account" sont limités! !! !!

Liste des services disponibles pour votre compte AWS Educate Starter

https://s3.amazonaws.com/awseducate-starter-account-services/AWS_Educate_Starter_Accounts_and_AWS_Services.pdf

En regardant cette liste, il est dit que l'instance SageMaker ne peut pas être utilisée.

En d'autres termes, vous ne pouvez pas utiliser «SageMaker» simplement parce que vous avez créé un «compte AWS Educate Starter». Lorsque j'ai procédé sans le savoir au début, l'erreur suivante est apparue lors de l'ajustement final du modèle de «Entraînement du modèle».

ClientError: An error occurred (AccessDeniedException) when calling the CreateTrainingJob operation: User: arn:aws:sts::780079846795:assumed-role/AmazonSageMaker-ExecutionRole-20191119T213649/SageMaker is not authorized to perform: sagemaker:CreateTrainingJob on resource: arn:aws:sagemaker:us-east-1:780079846795:training-job/xgboost-2019-11-19-13-34-49-653 with an explicit deny

Alors, comment vous en débarrassez-vous?

En regardant à nouveau la liste des services disponibles, il semble que SageMaker puisse être utilisé avec le compte Starter en utilisant "Classroom" appelé "Machine Learning and AI".

Page d'introduction AWS Educate Classrooms (tout en anglais)

Après avoir traduit en quelque sorte le contenu de la page ci-dessus, l'enseignant ouvre une salle de classe, configure son propre espace éducatif virtuel AWS Educate, puis invite les étudiants à vérifier l'utilisation. Puisqu'il a été écrit sur quelque chose comme ça, j'ai demandé à un professeur du laboratoire auquel appartient l'université d'ouvrir une salle de classe. (À propos, de la demande à l'ouverture de Classroom peut être fait relativement rapidement.

Si vous êtes invité à Classroom, appuyez sur «Mes salles de classe» en haut à gauche de l'écran supérieur d'AWS Educate pour passer à l'écran ci-dessous. キャプチャ21.PNG Si vous appuyez sur «Aller en classe» et suivez les instructions à l'écran, vous pouvez accéder à l'écran de la console de gestion AWS dans la classe.

Enfin je peux commencer (pleurer)

① Créer un compartiment Amazon S3

Lorsque vous passez à l'écran du service S3, cela ressemble à ce qui suit. Créez en appuyant sur "Créer un seau" sur le côté gauche. キャプチャ2.PNG Le nom du bucket peut être librement nommé. Cette fois, je l'ai nommé "bank-xg boost". Cependant, veuillez noter que vous ne pouvez pas créer un nom qui a déjà été utilisé. La région spécifie l'est des États-Unis (nord de la Virginie).

  • N'oubliez pas le nom du bucket car le bucket créé ici sera utilisé plus tard. キャプチャ3.PNG Après cela, ne faites rien et créez un seau en suivant les instructions à l'écran. Une fois le compartiment créé, vous pouvez voir que le compartiment que vous avez nommé est créé comme indiqué dans la figure ci-dessous. キャプチャ4.PNG

② Créer une instance de notebook Amazon SageMaker

Lorsque vous passez à l'écran du service Amazon Sage Maker, cela ressemble à ce qui suit. キャプチャ5.PNG Si vous appuyez sur "Notebook Instance" dans la figure ci-dessus, il passera à la figure ci-dessous. Appuyez sur "Créer une instance de notebook" pour continuer à créer une instance de notebook. キャプチャ6.PNG Le nom de l'instance peut être librement nommé. Cette fois, je l'ai nommé "tutoriel bancaire". Le type d'instance de build de notebook est "ml.t2.medium" </ font> et reste la valeur par défaut. キャプチャ7.PNG Dans «Créer un rôle IAM» sous «Paramètres d'instance de notebook», spécifiez le paquet S3 spécifié comme «Paquet S3 arbitraire» et créez un rôle. キャプチャ8.PNG Une fois le rôle IAM créé, il ressemblera à l'illustration ci-dessous. Cliquez sur "Créer une instance de notebook" en bas à droite pour terminer la création. キャプチャ9.PNG Immédiatement après la création, l'état est "En attente", mais après environ 5 minutes, il sera "En service" et passez à l'étape suivante. キャプチャ10.PNG

③ Créez un notebook Jupyter

Lorsque l'état devient «En service», appuyez sur «Ouvrir Jupyter» pour passer à l'écran supérieur du bloc-notes Jupyter. キャプチャ11.PNG Lorsque vous accédez à l'écran supérieur du notebook Jupyter, spécifiez "conda_python3" dans "new" en haut à droite et créez un notebook, il sera comme indiqué dans la figure ci-dessous. キャプチャ.PNG

Importez les variables de configuration et les bibliothèques requises. Remplacez l'élément de compartiment ci-dessous par le nom du compartiment S3 que vous avez choisi précédemment. De plus, si les régions de SageMaker et S3 sont différentes, cela ne fonctionnera pas, alors faites attention si les régions sont identiques. Le dossier spécifié par le préfixe est nouvellement créé dans S3. Aucune modification particulière n'est requise, mais il n'y a pas de problème même si elle est modifiée le cas échéant. Enfin, déclarez les rôles de boto3 et IAM. Bien qu'il s'agisse de boto3, il s'agit d'une bibliothèque qui intègre Python développé par AWS et divers services AWS.

Pour exécuter une cellule, appuyez sur Maj + Entrée. Lorsque l'exécution est terminée, elle sera numérotée comme indiqué dans In [1] dans la figure ci-dessous. Parfois, le nom de la cellule sera In [*], mais cela ne prend que beaucoup de temps pour exécuter la cellule, alors attendez un moment avant de passer à l'étape suivante.

In[1]


#Veuillez définir le nom du compartiment de S3 comme suit
#Définir le préfixe S3 (aucune modification requise)
bucket = 'bank-xgboost'
prefix = 'sagemaker/xgboost-dm'
 
#Déclaration du rôle IAM
import boto3
import re
from sagemaker import get_execution_role
 
role = get_execution_role()

Ensuite, importez les différentes bibliothèques requises pour cette construction de modèle dans. Outre Numpy, Pandas et Matplotlib, qui sont du machine learning standard, un module de traçage de tables avec ipython (Jupyter Notebook) et le SDK Python de SageMaker sont également importés.

In[2]


import numpy as np                                #Pour les opérations matricielles et le traitement numérique
import pandas as pd                               #Pour modifier les données tabulaires
import matplotlib.pyplot as plt                   #Pour la visualisation des figures, etc.
from IPython.display import Image                 #Pour afficher des images dans le bloc-notes
from IPython.display import display               #Pour afficher la sortie dans le notebook
from time import gmtime, strftime                 #Pour étiqueter les modèles SageMaker, les points finaux, etc.
import sys                                        #Pour écrire la sortie sur le notebook
import math                                       #Pour la fonction de plafond
import json                                       #Pour l'analyse de la sortie d'hébergement
import os                                         #Pour manipuler le nom du chemin du fichier
import sagemaker                                  #De nombreuses fonctions d'assistance sont fournies à l'aide du SDK Python d'Amazon SageMaker
from sagemaker.predictor import csv_serializer    #Convertir les chaînes de requête HTTP POST lors de l'inférence

④ Téléchargez, sondez et convertissez les données d'entraînement

L'ensemble de données est disponible sur le site Web de l'Université de Californie à Irvine, alors obtenez-le directement à partir de là. Téléchargez directement depuis l'URL avec wget et unizip.

In[3]


#Téléchargez l'ensemble de données à partir de l'URL publique de l'Université de Californie à Irvine
!wget https://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank-additional.zip
!unzip -o bank-additional.zip

Chargez l'ensemble de données du fichier csv téléchargé en tant que trame de données Pandas.

In[4]


# bank-additional-full.Stocker le CSV dans les données
data = pd.read_csv('./bank-additional/bank-additional-full.csv', sep=';')
 
#Modification des paramètres de numéro de colonne d'affichage maximum et de numéro de ligne de Pandas
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 30)
 
#Afficher les 10 premières lignes
data.head(10)

Si vous affichez les 10 premières lignes de l'ensemble de données, vous pouvez voir que les informations client sont stockées. Voici une partie du plan des articles.

· Âge - Âge du client · Emploi - Catégorie d'emploi ・ Marital - État matrimonial ・ Éducation - Éducation · Par défaut - Statut de paiement en retard de crédit · Logement - avec ou sans prêt immobilier ・ Prêt - Qu'il y ait ou non un prêt personnel, etc ... キャプチャ20.PNG

Vérifiez les données manquantes. S'il manque des données, cela est gênant car il est nécessaire de discuter de la façon de les traiter séparément.

In[5]


#Une fonction de table qui résume les données manquantes dans une trame de données
def missing_values_table(df): 
        mis_val = df.isnull().sum()
        mis_val_percent = 100 * df.isnull().sum()/len(df)
        mis_val_table = pd.concat([mis_val, mis_val_percent], axis=1)
        mis_val_table_ren_columns = mis_val_table.rename(
        columns = {0 : 'Missing Values', 1 : '% of Total Values'})
        return mis_val_table_ren_columns 
 
#Vérifiez si des données sont manquantes
missing_values_table(data)

En regardant la figure ci-dessous, on peut observer qu'il n'y a pas de perte de données. Comme prévu, l'ensemble de données bancaires. image.png

Ensuite, le nettoyage des données (pré-traitement de l'ensemble de données) est effectué. Le nettoyage des ensembles de données est devenu un élément essentiel de presque tous les processus d'apprentissage automatique.

Cette fois, quatre types de prétraitement sont effectués.

** ① Extrayez les clients qui n'ont pas été contactés depuis pdays ** Le pdays (combien de jours se sont écoulés depuis le dernier contact) contient une grande quantité de données "999", et on peut dire que la plupart des clients n'ont pas contacté depuis la dernière fois. Le traitement des données est effectué avec 999 jours (c'est-à-dire les clients qui n'ont pas été contactés) comme "1" et les autres comme "0".

** ② Extraire les clients qui ne sont pas actuellement en poste à partir du poste ** Il existe 12 types d'éléments de travail, y compris inconnus. Cet élément comprend les clients qui ne sont pas actuellement en emploi, tels que «étudiants» ou «chômeurs». Par conséquent, le processus consistant à séparer s'il fonctionne actuellement ou non et à ajouter un nouvel élément "not_working" (ne fonctionne pas) est effectué.

** ③ Faire des données catégorielles une variable factice ** La méthode de numérisation des données non numériques est appelée variable fictive. Par exemple, dans le cas de ces données, la cible de prédiction est "y", mais les valeurs qu'elle a sont "yes" et "no". Lorsque cela est transformé en une variable factice, un élément "y" est initialement divisé en deux éléments "y_yes" et "y_no", et "0" et "1" sont donnés en fonction de chaque valeur.

** ④ Supprimer les éléments qui ne sont pas inclus dans le modèle de prédiction ** Enfin, utilisez pd.drop pour supprimer les éléments non utilisés dans cette formation, tels que les indicateurs de facteurs environnementaux externes (emp.var.rate), de la base de données.

In[7]


#Ajout d'un nouvel élément pour identifier les personnes qui n'ont pas été contactées auparavant
data['no_previous_contact'] = np.where(data['pdays'] == 999, 1, 0)
 
#Ajout de drapeaux "Personnes sans emploi" (étudiants, etc.) de la profession
data['not_working'] = np.where(np.in1d(data['job'], ['student', 'retired', 'unemployed']), 1, 0)
 
#Faire des données catégorielles une variable factice
model_data = pd.get_dummies(data)
 
#Supprimer les éléments non utilisés dans ce modèle
model_data = model_data.drop(['duration', 'emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m', 'nr.employed'], axis=1)

Une fois le prétraitement terminé, la tâche suivante consiste à diviser les données en trois parties: données d'entraînement, données de vérification et données de test.

En ce qui concerne la raison pour laquelle il est divisé, pour le dire simplement, je veux l'entraîner plusieurs fois pour améliorer la précision du modèle, je vais donc le laisser au point de vue cette fois.

In[8]


#Modèle pré-traité_Trier les données de manière aléatoire dans 3 trames de données
train_data, validation_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [int(0.7 * len(model_data)), int(0.9 * len(model_data))])   # Randomly sort the data then split out first 70%, second 20%, and last 10%

Vient ensuite la dernière étape du prétraitement des données. Le format de données du conteneur Amazon SageMaker XGBoost est libSVM. Bien qu'il soit au format libSVM, la fonction (quantité de fonctionnalités) et la cible de prédiction (variable d'objectif) doivent être des arguments séparés, de sorte que le processus est exécuté. Enfin, envoyez cet ensemble de données d'entraînement (format libSVM) à AWS S3 via boto3.

In[9]


#Exporter le fichier libSVM
dump_svmlight_file(X=train_data.drop(['y_no', 'y_yes'], axis=1), y=train_data['y_yes'], f='train.libsvm')
dump_svmlight_file(X=validation_data.drop(['y_no', 'y_yes'], axis=1), y=validation_data['y_yes'], f='validation.libsvm')
dump_svmlight_file(X=test_data.drop(['y_no', 'y_yes'], axis=1), y=test_data['y_yes'], f='test.libsvm')
 
#Copier des fichiers sur S3 à l'aide de Boto3
boto3.Session().resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'train/train.libsvm')).upload_file('train.libsvm')
boto3.Session().resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'validation/validation.libsvm')).upload_file('validation.libsvm')

Cela créera un nouveau dossier appelé «sagemaker» dans le premier compartiment AWS S3 que vous avez spécifié. Comme le montre la figure ci-dessous, si train.libsvm est nouvellement créé dans le répertoire de S3> nom du compartiment> sagemaker> xgboost-dm> train, il s'est déroulé sans problème. キャプチャ22.PNG

⑤ Former le modèle

Maintenant que le prétraitement est terminé, il est temps de créer le modèle à l'aide de XGBoost.

Tout d'abord, spécifiez l'emplacement du conteneur ECR pour XGBoost d'Amazon SageMaker et liez les données d'entraînement (libSVM) avec S3.

In[10]


#Spécifier le conteneur ECR pour SageMaker XGBoost
containers = {'us-west-2': '433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest',
              'us-east-1': '811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest',
              'us-east-2': '825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest',
              'eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest'}

#Je vais lier les données d'entraînement et S3
s3_input_train = sagemaker.s3_input(s3_data='s3://{}/{}/train'.format(bucket, prefix), content_type='libsvm')
s3_input_validation = sagemaker.s3_input(s3_data='s3://{}/{}/validation/'.format(bucket, prefix), content_type='libsvm')

Ensuite, spécifiez les paramètres nécessaires et les hyperparamètres dans SageMaker Estimator et effectuez l'ajustement. Le code ci-dessous utilise "ml.m4.xlarge" </ font> comme instance de formation. Le processus est terminé en environ 10 minutes.

In[11]


#Session SageMaker
sess = sagemaker.Session()
 
#Spécifiez les éléments requis pour l'estimateur de sagemaker
xgb = sagemaker.estimator.Estimator(containers[boto3.Session().region_name],
                                    role, 
                                    train_instance_count=1, 
                                    train_instance_type='ml.m4.xlarge',
                                    output_path='s3://{}/{}/output'.format(bucket, prefix),
                                    sagemaker_session=sess)
 
#Spécification d'hyper paramètres
xgb.set_hyperparameters(max_depth=5,
                        eta=0.2,
                        gamma=4,
                        min_child_weight=6,
                        subsample=0.8,
                        silent=0,
                        objective='binary:logistic',
                        num_round=100)
 
#Ajustement du modèle et spécification de la destination de sortie (S3)
xgb.fit({'train': s3_input_train, 'validation': s3_input_validation})

Si le processus se déroule bien, les mots suivants apparaîtront.

2019-11-18 16:36:46 Uploading - Uploading generated training model
2019-11-18 16:36:46 Completed - Training job completed
Training seconds: 63
Billable seconds: 63

⑥ Hébergement de modèles (également point important)

Après l'ajustement, l'hébergement du modèle se fait ensuite. Le code ci-dessous utilise une instance de "ml.t2.medium" </ font>. Cela prend également environ 10 minutes pour terminer le processus.

In[12]


# ml.t2.Déployer avec une instance de support
xgb_predictor = xgb.deploy(initial_instance_count=1,
                           instance_type='ml.t2.medium')

. . . . . Concernant ce modèle d'hébergement, j'ai d'abord essayé de le déployer sur une instance de "ml.c4.xlarge" </ font>. C'est parce que le code de la Page de référence ci-dessus était de cette façon.

Cependant, j'ai eu l'erreur suivante.

ResourceLimitExceeded: An error occurred (ResourceLimitExceeded) when calling the CreateEndpoint operation: The account-level service limit 'ml.c4.xlarge for endpoint usage' is 0 Instances, with current utilization of 0 Instances and a request delta of 1 Instances. Please contact AWS support to request an increase for this limit.

Pour faire simple, les ressources de ce compte ont atteint la limite, j'ai donc contacté AWS Support pour libérer la limite, et il a dit quelque chose comme ça.

Comme prévu, compte Starter. Faibles ressources ...

Diverses instances ont été publiées sur la page Frais d'instance Amazon SageMaker, j'ai donc essayé diverses choses, mais concernant le déploiement du modèle Seule l'instance ml.t2.medium a fonctionné.

Même ainsi, l'instance à utiliser pour le moment ・ Construction ** "ml.t2.medium" ** ・ Formation ** "ml.m4.xlarge" ** -Déployer ** "ml.t2.medium" **

Avec cette combinaison, je ne suis pas resté bloqué jusqu'à la fin, donc si quelqu'un fera la même chose avec le compte Starter à l'avenir, veuillez vous y référer. (Prix bas = Si vous adoptez une instance qui n'utilise pas beaucoup de ressources, ne serez-vous pas pris dans la limite de ressources?)

En passant, lorsque j'ai demandé à AWS Support si je pouvais libérer la limite supérieure par e-mail, il a été dit que la limite supérieure ne pouvait pas être libérée avec le compte Starter du niveau gratuit ...

⑦ Vérifiez le modèle

Dans un premier temps, nous préciserons comment réussir et recevoir les données utilisées dans l'évaluation. Bien qu'il s'agisse de données de test, elles sont actuellement placées en tant que tableau Numpy sur une instance du bloc-notes SageMaker. Afin d'envoyer ceci au modèle de prédiction avec une requête HTTP POST, sérialisez-le à l'aide du "sérialiseur" de SageMaker et spécifiez également le content_type.

In[13]


#Définir les paramètres de transfert de données
xgb_predictor.content_type = 'text/csv'
xgb_predictor.serializer = csv_serializer

Ensuite, divisez le test_data créé à l'étape précédente en petits lots de 500 lignes chacun, faites des prédictions au point de terminaison XGBoost et sortez sous forme de tableau Numpy.

In[14]


#Xgb par petits lots de 500 lignes_Prédire et calculer avec le prédicteur
def predict(data, rows=500):
    split_array = np.array_split(data, int(data.shape[0] / float(rows) + 1))
    predictions = ''
    for array in split_array:
        predictions = ','.join([predictions, xgb_predictor.predict(array).decode('utf-8')])
 
    return np.fromstring(predictions[1:], sep=',')
 
#Test créé dans l'élément précédent_Supprimer l'élément cible des données et générer la prévision
predictions = predict(test_data.drop(['y_no', 'y_yes'], axis=1).as_matrix())
 
#Tableau de comparaison des données de prédiction et de réponse correcte
pd.crosstab(index=test_data['y_yes'], columns=np.round(predictions), rownames=['actuals'], colnames=['predictions'])

Les valeurs prédites sont désormais stockées dans le tableau Numpy en tant que prédictions. Enfin, Pandas est utilisé pour tabuler les données de réponses correctes réelles et les résultats de «prédictions» prévus. . . . . . キャプチャ.PNG

Le résultat attendu cette fois est celui indiqué dans la figure ci-dessus.

Comme il est difficile de le voir tel quel, il est résumé comme indiqué dans le tableau ci-dessous. image.png Si vous lisez ceci,

J'ai prédit qu'il y aurait 77 personnes qui ont répondu Oui, mais en fait, seulement 3 de ces 77 personnes ont répondu Oui. De plus, parmi ceux qui ont prédit Non, il y avait en fait 480 personnes qui ont répondu Oui.

Cette fois, je ne peux pas dire que le résultat de l'analyse soit très précis, mais cette fois, j'avais l'impression que j'allais aborder l'apprentissage automatique pour le moment ... Il semble y avoir plus de place pour améliorer la précision des prédictions, comme l'ajustement des quantités de caractéristiques et l'ajustement des hyper paramètres.

** Encore la dernière tâche importante. ** **

Après avoir terminé ce didacticiel, supprimez le point de terminaison créé cette fois afin de ne pas entraîner de frais supplémentaires.

In[16]


#Supprimer le point de terminaison créé
sagemaker.Session().delete_endpoint(xgb_predictor.endpoint)

En plus de cela, l'auteur peut vérifier l'état de "modèle", "endpoint" et "notebook" sur l'écran de gestion de SageMaker, j'ai donc supprimé les éléments inutiles le cas échéant.

finalement

Cette fois, je pense avoir appris un peu comment utiliser SageMaker, comment utiliser l'apprentissage automatique et les connaissances en suivant le didacticiel AWS SageMaker.

Il y a plus de tutoriels en plus de celui-ci, donc si vous avez le temps, je veux vraiment l'essayer.

Liste des autres tutoriels (en anglais) ☞ Exemples Amazon SageMaker

J'ai toujours l'impression d'avoir enfin atteint la ligne de départ de l'apprentissage automatique, alors j'espère pouvoir continuer à entrer diverses choses et à les sortir à nouveau sur Qiita comme cette fois.

Je pense que c'était une phrase enfantine, mais merci de l'avoir lue.