[PYTHON] "Zum ersten Mal Kikaigakushu", das selbst Studenten ohne Wissen tun können - AWS SageMaker

Hintergrund des Schriftstellers

Amazon? Ah, es ist eine Versandhandels-App, ich weiß, ich weiß. Vor nicht allzu langer Zeit war dies der Wissensstand über Amazon. Natürlich wusste ich nichts über AWS.

Ich schäme mich als Student. </ font>

Jetzt, da ich im dritten Studienjahr bin, habe ich etwas über AWS gelernt, weil ich einem Labor zugewiesen wurde. Außerdem war ich zu diesem Zeitpunkt süchtig nach dem Thema "Atsuhiko Nakatas YouTube-Universität". Während Sie ein Video ansehen, ruft ein Cloud-Dienst namens AWS genau zum gleichen Zeitpunkt auf Ich hatte nur vage Kenntnisse darüber.

☟ Das Video, in dem ich die Existenz von AWS erkannte, wurde als Blockchain bezeichnet Die Technologie war auch sehr interessant. キャプチャ.PNG [Wirtschaft] Die ultimative Waffe der 5G-Ära, "Blockchain" - Teil 1 - Eine wichtige Erfindung, die die Zukunft der Menschheit verändern wird! --Atsuhiko Nakatas YouTube-Universität

Ich habe AWS durch den obigen Prozess kennengelernt und obwohl ich keine Kenntnisse habe, denke ich, dass ich verschiedene Dinge tun kann. Lass es uns tatsächlich benutzen! . . . Es wurde.

Amazon SageMaker Ich wollte also maschinelles Lernen mit AWS machen Ich habe mich für einen Dienst namens Amazon SageMaker entschieden.

SageMaker ist ein vollständig verwalteter End-to-End-Service für maschinelles Lernen, der gerade auf der re: invent 2017 angekündigt und veröffentlicht wurde. Es bietet Dienstleistungen zur Verwaltung des Modellentwicklungsprozesses des maschinellen Lernens und übernimmt die komplizierten und problematischen Teile des Modellentwicklungsprozesses. Dies senkt nicht nur den Schwellenwert für Ingenieure, die mit dem maschinellen Lernen beginnen möchten, sondern ermöglicht es auch Datenwissenschaftlern, KI-Ingenieuren und Experten für maschinelles Lernen, schnell Modelle für skalierbares Training und schnelle Freigabe (Bereitstellung) zu erstellen.

Mit anderen Worten, Amazon SageMaker ist ein Dienst, mit dem Sie auf einfache Weise maschinelles Lernen </ font> durchführen können. Ich bin sehr dankbar für mich als Anfänger.

Übersicht über SageMaker

SageMaker besteht aus drei Modulen: "Authoring", "Training" und "Hosting". image.png ** ** Der sogenannte Datensatzvorverarbeitungsprozess. Es wird gesagt, dass 90% des maschinellen Lernens die Vorverarbeitung von Datensätzen ist, was ein wichtiger Prozess ist. Mit AWS SageMaker kann Jupyter Notebook je nach Nutzungssituation einfach in der Cloud eingerichtet und verwendet werden, z. B. CPU- oder GPU-basiert.

** ** Sie können Ihr Modell mit dem von SageMaker bereitgestellten integrierten Algorithmus, dem Deep Learning-Framework und der von Docker bereitgestellten einzigartigen Lernumgebung trainieren. Das generierte Modell wird in S3 gespeichert. Dieses Modell kann unverändert auf SageMaker gehostet oder aus AWS entfernt und auf IoT-Geräten bereitgestellt werden.

** ** Ein HTTPS-Endpunkt wird bereitgestellt, damit das erstellte Modell in Echtzeit verwendet werden kann.

SageMaker-Tutorial

Das heißt, die Realität ist nicht so süß, dass Sie maschinelles Lernen machen können, nur weil Sie irgendwie maschinelles Lernen machen wollen!

Denn wenn Sie selbst maschinell lernen möchten ** ① Datensatz für maschinelles Lernen ** ** ② Kenntnisse der für den Modellbau erforderlichen Analysemethoden und Umgebungen ** ** ③ Kenntnisse in Python und Bibliotheken, die für die Vorverarbeitung von Daten erforderlich sind **

Dies liegt daran, dass das oben Genannte erforderlich ist. . . . . . Nein, ich war in Schwierigkeiten. Obwohl ich begeistert war, maschinelles Lernen mit einem leichten Gefühl auszuprobieren, habe ich keinen besonderen Wunsch zu analysieren, was ich eigentlich analysieren möchte, und da ich die Programmierung bisher übersprungen habe, habe ich fast keine Kenntnisse über Python.

** Aber **, SageMaker hat ein Tutorial, es gibt einen Datensatz, Die zu verwendende Bibliothek und die Vorgehensweise zum Schreiben von Code werden ausführlich erläutert.

Einfach ausgedrückt: Wenn Sie SageMaker gemäß dem Lernprogramm verwenden, können Sie auch mit 0 Kenntnissen eine Reihe von maschinellen Lernabläufen erleben und die Praktikabilität der Analysemethode erlernen. Das ist </ font>.

Vorhersage potenzieller Kunden für Bankeinlagen mit XGboost

Anschließend erkläre ich den Umriss des Tutorials, das dieses Mal tatsächlich ausgeführt wird.

Dieses Mal verwendetes Tutorial (veröffentlicht auf GitHub) ☟ Targeting Direct Marketing with Amazon SageMaker XGBoost

Dieses Tutorial ist vollständig in Englisch geschrieben, aber einige Leute machen dieses Tutorial auf Japanisch, daher verweise ich auch auf diese Seite. ☟ Prognostizieren Sie potenzielle Kunden für Bankeinzahlungen mit Amazon SageMaker [SageMaker + XGBoost-Lernprogramm für maschinelles Lernen] -codExa

Der diesmal verwendete Datensatz ist das Ergebnis der direkten Vermarktung regelmäßiger Ersparnisse per Telefon durch eine Bank in Portugal. Es gibt Daten wie Alter, Beruf und akademischer Hintergrund jedes Benutzers und aufgrund des Direktmarketings diejenigen, die eine feste Einzahlung beantragt haben (Label = 1), diejenigen, die sich nicht beworben haben (Label = 0). ) Ist gegeben.

Wenn Sie ein Ingenieur für maschinelles Lernen sind, scheint es ein sehr berühmter Datensatz für Anfänger zu sein, den Sie einmal hören werden? (Natürlich wusste ich es zum ersten Mal.)

Dieser Datensatz wird mithilfe einer Lernmethode namens XGboost analysiert, um vorherzusagen, ob Direktmarketing an Kunden erfolgreich sein wird. Der allgemeine Ablauf dieses Tutorials besteht darin, das Vorhersageergebnis mit den tatsächlichen Daten zu vergleichen und zu überprüfen, wie genau die Vorhersage war.

Übersicht über den XG-Boost

Dieses Mal werde ich den Umriss der Analysemethode "XG Boost" erläutern, die beim Erstellen eines Modells verwendet wird.

XGBoost ist eine bekannte und effiziente Open-Source-Implementierung des Gradienten-Boost-Tree-Algorithmus. Gradient Boosting ist ein überwachter Lernalgorithmus, der versucht, Zielvariablen genau vorherzusagen, indem er ein Ensemble von Schätzungen aus einem einfacheren Satz schwächerer Modelle kombiniert. XGBoost war bei Wettbewerben zum maschinellen Lernen wie kaggle sehr erfolgreich, da es eine große Anzahl von Hyperparametern robust verarbeiten kann, die umgeschaltet und an unterschiedliche Datentypen, Vertrauensbeziehungen, Verteilungen und Anforderungen angepasst werden können.

Kurz gesagt, XGboost ist die am stärksten überwachte Lernmethode! Ich habe es als solches interpretiert. In letzter Zeit scheint die Lernmethode LightGBM den Titel zu verlieren ... w

Was ist betreutes Lernen? Einführung in andere Lernmethoden

Früher sagte XGboost, dass es mit einem Lehrer lernen würde, aber ich bin mir nicht sicher, ob ich mit einem Lehrer lernen soll, also habe ich ein wenig recherchiert.

Es gibt drei Methoden des maschinellen Lernens: "überwachtes Lernen", "unbeaufsichtigtes Lernen" und "verbessertes Lernen".

** **

Überwachtes Lernen ist eine Methode, bei der ein Computer mithilfe eines Lernmodells lernt, das auf Daten basiert, für die korrekte Bezeichnungen und numerische Werte bekannt sind. Es ist die einfachste Lernmethode des maschinellen Lernens und zeichnet sich dadurch aus, dass es einfach ist, Ergebnisse zu erzielen, die den Vorhersagen des Menschen bei der Klassifizierung und Vorhersage nahe kommen. Beispiele für die Verwendung sind Marktprognosen bei Transaktionen und Schätzungen von Kunden, die häufig ihre Produkte kaufen.

** **

Unüberwachtes Lernen ist eine Lernmethode, bei der Gruppen mit gemeinsamen Merkmalen gefunden und Informationen extrahiert werden, die die Daten aus Eingabedaten ohne korrekte Antwortbezeichnung charakterisieren. Clustering ist ein typischer Anwendungsfall. Beim Clustering werden Daten mit ähnlichen Merkmalen automatisch aus den Daten ermittelt und in verschiedene Arten von Gruppen unterteilt.

** <Lernen stärken> **

Im Gegensatz zu überwachtem und unbeaufsichtigtem Lernen ist intensives Lernen eine Methode, um das optimale Urteilsvermögen zu finden, während tatsächlich auf eine Aufgabe reagiert wird, die Zeit benötigt, um Ergebnisse zu erzielen, oder eine große Anzahl von Wiederholungen erfordert. Es wird zum automatischen Fahren von Automobilen, zur Steuerung von Robotern und für Spiele wie AlphaGo verwendet.

Was sind die drei Lernmethoden des "maschinellen Lernens" (überwachtes Lernen, unbeaufsichtigtes Lernen und erweitertes Lernen)? --Sweeep Magazin

Tatsächlicher Ablauf des SageMaker-Tutorials

Die Einführung ist lang geworden, aber ich werde von hier aus erklären, wie die Analyse tatsächlich fortgesetzt werden soll.

Das AWS Educate Starter-Konto wurde als das für die Verwendung von SageMaker erforderliche AWS-Konto übernommen. Für die Nutzung von AWS-Diensten wird grundsätzlich eine Gebühr erhoben. Das AWS Educate Starter-Konto erhält jedoch standardmäßig ein Guthaben von mehreren zehn Dollar, sodass Sie AWS-Dienste für eine Weile praktisch kostenlos nutzen können. Dies ist ein sehr schönes Privileg für den Autor, der ein armer Student ist. Es gibt jedoch verschiedene Dienste, die aufgrund vieler Vorschriften nicht genutzt werden können. Seien Sie dort also vorsichtig. Details werden später beschrieben. Darüber hinaus werde ich in Bezug auf den diesmal beschriebenen Analysefluss den Teil, in dem der Autor versagt hat und feststeckt, detailliert beschreiben und das Lösungsverfahren erläutern. In Zukunft möchte ich, dass dieser Artikel als Fehlerbehebung für diejenigen verwendet wird, die SageMaker mit einem AWS Educate Starter-Konto berühren, sowie für mich.

Zunächst folgt eine kurze Erläuterung des Analyseverfahrens.

** ⓪ Öffnen Sie den Bildschirm AWS Management Console ① Erstellen Sie einen Amazon S3-Bucket ② Erstellen Sie eine Amazon SageMaker-Notebook-Instanz ③ Erstellen Sie ein Jupyter-Notizbuch ④ Herunterladen, Umfragen und Konvertieren von Trainingsdaten ⑤ Trainieren Sie das Modell ⑥ Model Hosting ⑦ Überprüfen Sie das Modell **

Dann werde ich jedes Verfahren im Detail erklären. Es ist sehr lange her, also hoffe ich, dass Sie einen kurzen Blick darauf werfen.

⓪ Öffnen Sie den Bildschirm AWS Management Console (dies ist überraschend wichtig).

Melden Sie sich zunächst bei Ihrem AWS Educate-Konto an und klicken Sie oben links auf "AWS-Konto", um zum folgenden Bildschirm zu gelangen. Capture 1.PNG Wenn Sie danach AWS Console gemäß den Anweisungen auf dem Bildschirm starten, wird der Bildschirm "AWS Management Console" wie unten gezeigt geöffnet.

Suchen Sie nach "Nach Diensten suchen" und geben Sie den Dienst an, den Sie verwenden möchten. Dieses Mal werden wir "S3" und "Amazon Sage Maker" verwenden. キャプチャ.PNG . . . . . Wenn ein Anfänger gut läuft, wird dies passieren, aber wie oben erwähnt, sind die Dienste, die mit dem "AWS Educate Starter Account" verwendet werden können, begrenzt! !! !!

Liste der für Ihr AWS Educate Starter-Konto verfügbaren Dienste

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

In dieser Liste heißt es, dass die SageMaker-Instanz nicht verwendet werden kann.

Mit anderen Worten, Sie können "SageMaker" nicht verwenden, nur weil Sie ein "AWS Educate Starter-Konto" erstellt haben. Als ich fortfuhr, ohne es zuerst zu wissen, trat der folgende Fehler bei der endgültigen Modellanpassung von "⑤ Training the model" auf.

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

Wie werden Sie das los?

Wenn Sie sich die Liste der verfügbaren Dienste noch einmal ansehen, scheint es, dass SageMaker mit dem Starter-Konto verwendet werden kann, indem Sie "Klassenzimmer" verwenden, das als "Maschinelles Lernen und KI" bezeichnet wird.

Einführungsseite zu AWS Educate Classrooms (alle in Englisch)

Nachdem der Inhalt der obigen Seite irgendwie übersetzt wurde, öffnet der Pädagoge ein Klassenzimmer, richtet seinen eigenen virtuellen AWS Educate-Bildungsbereich ein und lädt die Schüler ein, die Verwendung zu überprüfen. Da es über so etwas geschrieben wurde, bat ich einen Professor im Labor, zu dem die Universität gehört, ein Klassenzimmer zu eröffnen. (Übrigens kann von der Bewerbung bis zur Eröffnung des Klassenzimmers relativ schnell vorgegangen werden.

Wenn Sie zum Klassenzimmer eingeladen werden, klicken Sie oben links im oberen Bildschirm von AWS Educate auf "Meine Klassenzimmer", um zum unten gezeigten Bildschirm zu wechseln. キャプチャ21.PNG Wenn Sie auf "Zum Klassenzimmer gehen" klicken und den Anweisungen auf dem Bildschirm folgen, werden Sie zum Bildschirm der AWS Management Console im Klassenzimmer weitergeleitet.

Endlich kann ich anfangen (weinen)

① Erstellen Sie einen Amazon S3-Bucket

Wenn Sie zum S3-Servicebildschirm wechseln, sieht es folgendermaßen aus. Erstellen Sie durch Drücken von "Eimer erstellen" auf der linken Seite. キャプチャ2.PNG Der Bucket-Name kann frei benannt werden. Dieses Mal nannte ich es "bank-xg boost". Beachten Sie jedoch, dass Sie keinen Namen verwenden können, der bereits verwendet wurde. Die Region spezifiziert den Osten der Vereinigten Staaten (Nord-Virginia).

  • Merken Sie sich den Bucket-Namen, da der hier erstellte Bucket später verwendet wird. キャプチャ3.PNG Tun Sie danach nichts und erstellen Sie einen Eimer gemäß den Anweisungen auf dem Bildschirm. Sobald der Bucket erstellt wurde, können Sie sehen, dass der von Ihnen benannte Bucket wie in der folgenden Abbildung gezeigt erstellt wurde. キャプチャ4.PNG

② Erstellen Sie eine Amazon SageMaker-Notebook-Instanz

Wenn Sie zum Amazon Sage Maker-Servicebildschirm wechseln, sieht es folgendermaßen aus. キャプチャ5.PNG Wenn Sie in der obigen Abbildung auf "Notebook-Instanz" klicken, wird zur folgenden Abbildung übergegangen. Drücken Sie auf "Notizbuchinstanz erstellen", um mit dem Erstellen einer Notizbuchinstanz fortzufahren. キャプチャ6.PNG Der Instanzname kann frei benannt werden. Dieses Mal nannte ich es "Bank-Tutorial". Der Instanztyp für die Notebook-Erstellung lautet "ml.t2.medium" </ font> und bleibt der Standard. キャプチャ7.PNG Geben Sie unter "IAM-Rolle erstellen" unter "Notebook-Instanzeinstellungen" das angegebene S3-Paket als "Beliebiges S3-Paket" an und erstellen Sie eine Rolle. キャプチャ8.PNG Sobald die IAM-Rolle erstellt wurde, sieht sie wie in der folgenden Abbildung aus. Klicken Sie daher unten rechts auf "Notebook-Instanz erstellen", um die Erstellung abzuschließen. キャプチャ9.PNG Unmittelbar nach der Erstellung lautet der Status "Ausstehend", nach etwa 5 Minuten ist er jedoch "In Betrieb" und fährt mit dem nächsten Schritt fort. キャプチャ10.PNG

③ Erstellen Sie ein Jupyter-Notizbuch

Wenn der Status "In Betrieb" lautet, drücken Sie "Jupyter öffnen", um zum oberen Bildschirm des Jupyter-Notizbuchs zu gelangen. キャプチャ11.PNG Wenn Sie zum oberen Bildschirm des Jupyter-Notizbuchs gehen, geben Sie oben rechts unter "neu" "conda_python3" an und erstellen Sie ein Notizbuch. Dies entspricht der Abbildung unten. キャプチャ.PNG

Importieren Sie die erforderlichen Konfigurationsvariablen und Bibliotheken. Ändern Sie das unten stehende Bucket-Element in den zuvor festgelegten S3-Bucket-Namen. Wenn sich die Regionen von SageMaker und S3 unterscheiden, funktioniert dies nicht. Seien Sie also vorsichtig, wenn die Regionen identisch sind. Der durch das Präfix angegebene Ordner wird in S3 neu erstellt. Es ist keine besondere Änderung erforderlich, aber es gibt kein Problem, auch wenn es entsprechend geändert wird. Deklarieren Sie abschließend die Rollen von boto3 und IAM. Obwohl es sich um boto3 handelt, handelt es sich um eine Bibliothek, die von AWS entwickeltes Python und verschiedene AWS-Services integriert.

Um eine Zelle auszuführen, drücken Sie Umschalt + Eingabetaste. Wenn die Ausführung abgeschlossen ist, wird sie wie in In [1] in der folgenden Abbildung gezeigt nummeriert. Gelegentlich lautet der Name der Zelle In [*], die Ausführung der Zelle dauert jedoch nur sehr lange. Warten Sie daher eine Weile, bevor Sie mit dem nächsten Schritt fortfahren.

In[1]


#Bitte setzen Sie den Bucket-Namen von S3 wie folgt
#S3-Präfix einstellen (keine Änderung erforderlich)
bucket = 'bank-xgboost'
prefix = 'sagemaker/xgboost-dm'
 
#Erklärung der IAM-Rolle
import boto3
import re
from sagemaker import get_execution_role
 
role = get_execution_role()

Importieren Sie als Nächstes die verschiedenen Bibliotheken, die für diese Modellkonstruktion erforderlich sind. Neben Numpy, Pandas und Matplotlib, die standardmäßiges maschinelles Lernen sind, werden auch ein Modul zum Plotten von Tabellen mit Ipython (Jupyter Notebook) und das Python SDK von SageMaker importiert.

In[2]


import numpy as np                                #Für Matrixoperationen und numerische Verarbeitung
import pandas as pd                               #Zum Ändern von Tabellendaten
import matplotlib.pyplot as plt                   #Zur Visualisierung von Figuren etc.
from IPython.display import Image                 #Anzeigen von Bildern im Notizbuch
from IPython.display import display               #Anzeige der Ausgabe im Notebook
from time import gmtime, strftime                 #Zum Beschriften von SageMaker-Modellen, Endpunkten usw.
import sys                                        #Zum Schreiben der Ausgabe auf ein Notebook
import math                                       #Für die Deckenfunktion
import json                                       #Zur Analyse der Hosting-Ausgabe
import os                                         #So bearbeiten Sie den Dateipfadnamen
import sagemaker                                  #Viele Hilfsfunktionen werden mithilfe des Python SDK von Amazon SageMaker bereitgestellt
from sagemaker.predictor import csv_serializer    #Konvertieren Sie HTTP-POST-Anforderungszeichenfolgen während der Inferenz

④ Herunterladen, Umfragen und Konvertieren von Trainingsdaten

Der Datensatz ist auf der Website der University of California in Irvine verfügbar. Erhalten Sie ihn also direkt von dort. Laden Sie direkt von der URL mit wget und unizip herunter.

In[3]


#Laden Sie den Datensatz von der öffentlichen URL der University of California, Irvine, herunter
!wget https://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank-additional.zip
!unzip -o bank-additional.zip

Laden Sie das heruntergeladene CSV-Dateidatensatz als Pandas-Datenrahmen.

In[4]


# bank-additional-full.Speichern Sie CSV in Daten
data = pd.read_csv('./bank-additional/bank-additional-full.csv', sep=';')
 
#Die Einstellungen für die maximale Anzahl der angezeigten Spalten und Zeilennummern von Pandas wurden geändert
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 30)
 
#Zeige die ersten 10 Zeilen
data.head(10)

Wenn Sie die ersten 10 Zeilen des Datensatzes anzeigen, können Sie sehen, dass die Kundeninformationen gespeichert sind. Hier ist ein Teil der Gliederung der Elemente.

· Alter - Kundenalter · Job - Jobkategorie ・ Ehe - Heiratsstatus ・ Bildung - Bildung · Standard - Status der verspäteten Zahlung ・ Wohnen - Ob es einen Immobilienkredit gibt oder nicht ・ Darlehen - Gibt an, ob ein persönliches Darlehen usw. vorliegt oder nicht. キャプチャ20.PNG

Überprüfen Sie, ob Daten fehlen. Wenn Daten fehlen, ist dies problematisch, da der separate Umgang damit besprochen werden muss.

In[5]


#Eine Tabellenfunktion, die fehlende Daten in einem Datenrahmen zusammenfasst
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 
 
#Überprüfen Sie, ob Daten fehlen
missing_values_table(data)

In der folgenden Abbildung ist zu erkennen, dass kein Datenverlust vorliegt. Wie erwartet der Bankdatensatz. image.png

Als nächstes wird eine Datenbereinigung (Datensatzvorverarbeitung) durchgeführt. Die Bereinigung von Datensätzen ist zu einem wesentlichen Bestandteil fast jedes maschinellen Lernprozesses geworden.

Dieses Mal werden vier Arten der Vorbehandlung durchgeführt.

** ① Extrahieren Sie Kunden, die von pdays nicht kontaktiert wurden ** Die Tage (wie viele Tage seit dem letzten Kontakt vergangen sind) enthalten eine große Menge von "999" -Daten, und es kann gesagt werden, dass die meisten Kunden seit dem letzten Mal keine Kontaktaufnahme mehr durchgeführt haben. Die Datenverarbeitung wird mit 999 Tagen (dh Kunden, die nicht kontaktiert wurden) als "1" und den anderen als "0" durchgeführt.

** ② Kunden, die derzeit nicht im Job sind, aus dem Job extrahieren ** Es gibt 12 Arten von Auftragselementen, einschließlich unbekannter. Dieser Artikel umfasst Kunden, die derzeit nicht erwerbstätig sind, z. B. "Student" oder "Arbeitslos". Daher wird der Prozess des Trennens, ob das Element gerade funktioniert oder nicht, und des Hinzufügens eines neuen Elements "not_working" ausgeführt.

** ③ Machen Sie kategoriale Daten zu einer Dummy-Variablen ** Das Verfahren zum Digitalisieren nicht numerischer Daten wird als Dummy-Variable bezeichnet. Im Fall dieser Daten ist das Vorhersageziel beispielsweise "y", aber die Werte, die es hat, sind "ja" und "nein". Wenn dies zu einer Dummy-Variablen gemacht wird, wird ein Element "y" ursprünglich in zwei Elemente "y_yes" und "y_no" unterteilt, und "0" und "1" werden entsprechend jedem Wert angegeben.

** ④ Elemente löschen, die nicht im Vorhersagemodell enthalten sind ** Verwenden Sie abschließend pd.drop, um Elemente, die in dieser Schulung nicht verwendet wurden, wie z. B. Indikatoren für externe Umweltfaktoren (emp.var.rate), aus dem Datenrahmen zu löschen.

In[7]


#Hinzufügen eines neuen Elements zur Identifizierung von Personen, die zuvor noch nicht kontaktiert wurden
data['no_previous_contact'] = np.where(data['pdays'] == 999, 1, 0)
 
#"Personen, die nicht erwerbstätig sind" (Studenten usw.) Flaggen aus dem Beruf hinzugefügt
data['not_working'] = np.where(np.in1d(data['job'], ['student', 'retired', 'unemployed']), 1, 0)
 
#Machen Sie kategoriale Daten zu einer Dummy-Variablen
model_data = pd.get_dummies(data)
 
#Löschen Sie Elemente, die in diesem Modell nicht verwendet werden
model_data = model_data.drop(['duration', 'emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m', 'nr.employed'], axis=1)

Nach Abschluss der Vorverarbeitung besteht die nächste Aufgabe darin, die Daten in drei Teile zu unterteilen: Trainingsdaten, Verifizierungsdaten und Testdaten.

In Bezug darauf, warum es geteilt wird, möchte ich es einfach viele Male trainieren, um die Genauigkeit des Modells zu verbessern, also werde ich es diesmal dem Standpunkt überlassen.

In[8]


#Vorverarbeitetes Modell_Sortieren Sie die Daten nach dem Zufallsprinzip in 3 Datenrahmen
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%

Als nächstes folgt der letzte Schritt der Datenvorverarbeitung. Das Datenformat des Amazon SageMaker XGBoost-Containers ist libSVM. Obwohl es im libSVM-Format vorliegt, müssen das Merkmal (Merkmalsmenge) und das Vorhersageziel (Zielvariable) separate Argumente sein, damit der Prozess ausgeführt wird. Senden Sie diesen Trainingsdatensatz (libSVM-Format) abschließend über boto3 an AWS S3.

In[9]


#Exportieren Sie die libSVM-Datei
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')
 
#Kopieren Sie Dateien mit Boto3 nach S3
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')

Dadurch wird im ersten von Ihnen angegebenen AWS S3-Bucket ein neuer Ordner mit dem Namen "sagemaker" erstellt. Wie in der folgenden Abbildung gezeigt, wurde train.libsvm problemlos neu erstellt, wenn es im Verzeichnis S3> Bucket-Name> Sagemaker> xgboost-dm> train neu erstellt wurde. キャプチャ22.PNG

⑤ Trainieren Sie das Modell

Nachdem die Vorverarbeitung abgeschlossen ist, ist es Zeit, das Modell mit XGBoost zu erstellen.

Geben Sie zunächst den Speicherort des ECR-Containers für XGBoost von Amazon SageMaker an und verknüpfen Sie die Trainingsdaten (libSVM) mit S3.

In[10]


#Geben Sie den ECR-Container für SageMaker XGBoost an
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'}

#Ich werde Trainingsdaten und S3 verknüpfen
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')

Geben Sie als Nächstes die erforderlichen Parameter und Hyperparameter für den SageMaker Estimator an und führen Sie die Anpassung durch. Der folgende Code verwendet "ml.m4.xlarge" </ font> als Trainingsinstanz. Der Vorgang ist in ca. 10 Minuten abgeschlossen.

In[11]


#SageMaker-Sitzung
sess = sagemaker.Session()
 
#Geben Sie die erforderlichen Elemente für den Schätzer des Sagemakers an
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)
 
#Angeben von Hyperparametern
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)
 
#Modellanpassung und Ausgabezielspezifikation (S3)
xgb.fit({'train': s3_input_train, 'validation': s3_input_validation})

Wenn der Prozess gut verläuft, werden die folgenden Wörter angezeigt.

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

⑥ Model Hosting (auch wichtiger Punkt)

Nach dem Anpassen erfolgt als nächstes das Modellhosting. Der folgende Code verwendet eine Instanz von "ml.t2.medium" </ font>. Dies dauert ebenfalls etwa 10 Minuten, um den Vorgang abzuschließen.

In[12]


# ml.t2.Stellen Sie mit einer Instanz eines Mediums bereit
xgb_predictor = xgb.deploy(initial_instance_count=1,
                           instance_type='ml.t2.medium')

. . . . . In Bezug auf dieses Modellhosting habe ich zuerst versucht, die Bereitstellung auf einer "ml.c4.xlarge" </ font> -Instanz durchzuführen. Das liegt daran, dass der Code auf der Referenzseite oben so war.

Ich habe jedoch den folgenden Fehler erhalten.

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.

Um es einfach auszudrücken: Die Ressourcen dieses Kontos haben das Limit erreicht. Deshalb habe ich mich an den AWS-Support gewandt, um das Limit freizugeben.

Wie erwartet Starterkonto. Geringe Ressourcen ...

Auf der Seite Amazon SageMaker-Instanzgebühr wurden verschiedene Instanzen veröffentlicht, daher habe ich verschiedene Dinge ausprobiert, jedoch in Bezug auf die Modellbereitstellung Nur die ml.t2.medium-Instanz hat funktioniert.

Trotzdem ist die Instanz vorerst zu verwenden ・ Konstruktion ** "ml.t2.medium" ** ・ Training ** "ml.m4.xlarge" ** -Deploy ** "ml.t2.medium" **

Mit dieser Kombination blieb ich bis zum Ende nicht hängen. Wenn also in Zukunft jemand dasselbe mit dem Starter-Konto machen wird, lesen Sie bitte weiter. (Niedriger Preis = Wenn Sie eine Instanz übernehmen, die nicht viele Ressourcen verbraucht, werden Sie dann nicht vom Ressourcenlimit erfasst?)

Übrigens, als ich den AWS-Support fragte, ob die Obergrenze per E-Mail freigegeben werden könne, wurde gesagt, dass die Obergrenze überhaupt nicht mit dem Starter-Konto des freien Frames freigegeben werden könne ...

⑦ Überprüfen Sie das Modell

In einem ersten Schritt legen wir fest, wie die in der Bewertung verwendeten Daten übergeben und empfangen werden sollen. Obwohl es sich um Testdaten handelt, werden sie derzeit als Numpy-Array auf einer Instanz des SageMaker-Notizbuchs platziert. Um dies mit einer HTTP-POST-Anforderung an das Vorhersagemodell zu senden, serialisieren Sie es mit dem "Serializer" von SageMaker und geben Sie auch den Inhaltstyp an.

In[13]


#Nehmen Sie Einstellungen für die Datenübertragung vor
xgb_predictor.content_type = 'text/csv'
xgb_predictor.serializer = csv_serializer

Teilen Sie als Nächstes die im vorherigen Schritt erstellten test_data in kleine Stapel mit jeweils 500 Zeilen auf, treffen Sie Vorhersagen am XGBoost-Endpunkt und geben Sie sie als Numpy-Array aus.

In[14]


#Xgb in kleinen Chargen von jeweils 500 Zeilen_Mit Prädiktor vorhersagen und berechnen
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 im vorherigen Element erstellt_Löschen Sie das Zielelement aus den Daten und geben Sie die Prognose aus
predictions = predict(test_data.drop(['y_no', 'y_yes'], axis=1).as_matrix())
 
#Vergleichstabelle der Vorhersage und korrekte Antwortdaten
pd.crosstab(index=test_data['y_yes'], columns=np.round(predictions), rownames=['actuals'], colnames=['predictions'])

Die vorhergesagten Werte werden jetzt als Vorhersagen im Numpy-Array gespeichert. Schließlich wird Pandas verwendet, um die tatsächlichen korrekten Antwortdaten und die vorhergesagten "Vorhersagen" zu tabellieren. . . . . . キャプチャ.PNG

Das erwartete Ergebnis dieses Mal ist wie in der obigen Abbildung gezeigt.

Da es so ist, ist es schwer zu sehen, deshalb habe ich es wie in der folgenden Tabelle gezeigt zusammengefasst. image.png Wenn Sie dies lesen,

Ich sagte voraus, dass es 77 Personen geben würde, die mit Ja antworteten, aber tatsächlich antworteten nur 3 dieser 77 Personen mit Ja. Unter denjenigen, die Nein vorausgesagt hatten, gab es tatsächlich 480 Personen, die mit Ja geantwortet hatten.

Dieses Mal kann ich nicht sagen, dass das Analyseergebnis sehr genau ist, aber dieses Mal hatte ich das Gefühl, dass ich vorerst das maschinelle Lernen ansprechen würde ... Es scheint mehr Raum für die Verbesserung der Vorhersagegenauigkeit zu geben, z. B. für die Anpassung der Merkmalsmengen und die Anpassung der Hyperparameter.

** Immer noch die letzte wichtige Aufgabe. ** ** **

Löschen Sie nach Abschluss dieses Lernprogramms den diesmal erstellten Endpunkt, um keine zusätzlichen Kosten zu verursachen.

In[16]


#Löschen Sie den erstellten Endpunkt
sagemaker.Session().delete_endpoint(xgb_predictor.endpoint)

Darüber hinaus kann der Autor den Status von "Modell", "Endpunkt" und "Notizbuch" auf dem Verwaltungsbildschirm von SageMaker überprüfen, sodass ich gegebenenfalls unnötige gelöscht habe.

Schließlich

Durch das diesmalige Ausführen des AWS SageMaker-Tutorials habe ich ein wenig über die Verwendung von SageMaker, das maschinelle Lernen und das Wissen gelernt.

Neben diesem gibt es noch weitere Tutorials. Wenn Sie also Zeit haben, möchte ich es auf jeden Fall ausprobieren.

Liste anderer Tutorials (Englisch) ☞ Amazon SageMaker-Beispiele

Ich habe immer noch das Gefühl, endlich die Startlinie des maschinellen Lernens erreicht zu haben, also hoffe ich, dass ich weiterhin verschiedene Dinge eingeben und sie wie dieses Mal wieder an Qiita ausgeben kann.

Ich denke, es war ein kindischer Satz, aber danke, dass Sie ihn gelesen haben.