Erstellen und Trainieren eines Machine-Learning-Modells vor Ort

TUTORIAL

Übersicht

In diesem Tutorial lernen Sie, wie Sie ein Machine Learning (ML)-Modell lokal in Ihrem Notebook von Amazon SageMaker Studio erstellen und trainieren.

Amazon SageMaker Studio ist eine integrierte Entwicklungsumgebung (IDE) für ML, welche eine vollständig verwaltete Jupyter-Notebook-Schnittstelle bietet, in der Sie den gesamten ML-Lebenszyklus durchführen können. Wenn Sie SageMaker Studio verwenden, können Sie Datensätze erstellen und untersuchen, Trainingsdaten vorbereiten, Modelle erstellen und trainieren und trainierte Modelle für Inferenzen einsetzen – alles an einem Ort.

Die Untersuchung einer Stichprobe des Datensatzes und die Iteration über mehrere Modell- und Parameterkonfigurationen vor dem Training mit dem vollständigen Datensatz ist eine gängige Praxis in der ML-Entwicklung. In dieser Phase der Erkundung bietet Amazon SageMaker den lokalen Modus, in dem Sie Ihre Trainingslogik testen, verschiedene Modellierungsansätze ausprobieren und die Leistung des Modells beurteilen können, bevor Sie einen umfassenden Trainingsauftrag ausführen.

Für dieses Tutorial werden Sie einen synthetisch erzeugten Datensatz für Kfz-Versicherungsansprüche verwenden. Die Eingaben sind die Trainings- und Testdatensätze, die jeweils Details und extrahierte Merkmale über Ansprüche und Kunden sowie eine Betrugsspalte enthalten, die anzeigt, ob ein Anspruch betrügerisch war oder nicht. Sie werden das Open-Source-Framework XGBoost verwenden, um ein binäres Klassifizierungsmodell für diesen synthetischen Datensatz zu entwickeln, das die Wahrscheinlichkeit einer betrügerischen Forderung vorhersagt.

Was Sie erreichen werden

In diesem Leitfaden werden Sie:

  • Trainingsdaten von Amazon S3 in Amazon SageMaker einlesen
  • Ein lokales XGBoost-Modell erstellen und trainieren
  • Das trainierte Modell und die Artefakte in Amazon S3 speichern

Voraussetzungen

Bevor Sie mit diesem Leitfaden beginnen, benötigen Sie:

  • Ein AWS-Konto: Wenn Sie noch keins haben, folgen Sie dem Leitfaden für die ersten Schritte zum Einrichten Ihrer Umgebung, um einen schnellen Überblick zu erhalten.

 Erfahrung mit AWS

Einsteiger

 Benötigte Zeit

15 Minuten

 Kosten für die Fertigstellung

Siehe SageMaker-Preise, um die Kosten für dieses Tutorial abzuschätzen.

 Erfordert

Sie müssen in einem AWS-Konto angemeldet sein.

 Verwendete Services

Amazon SageMaker Studio

 Letzte Aktualisierung

7. Juli 2022

Implementierung

Schritt 1: Richten Sie Ihre Domäne von Amazon SageMaker Studio ein

Mit Amazon SageMaker können Sie ein Modell visuell über die Konsole oder programmtechnisch über SageMaker Studio oder SageMaker Notebooks bereitstellen. In diesem Lehrgang stellen Sie das Modell programmgesteuert mithilfe eines SageMaker-Studio-Notebooks bereit, wofür eine SageMaker-Studio-Domäne erforderlich ist.

Ein AWS-Konto kann nur eine SageMaker-Studio-Domäne pro Region haben. Wenn Sie bereits über eine SageMaker Studio-Domäne in der Region USA Ost (Nord-Virginia) verfügen, befolgen Sie die Anleitung zur Einrichtung von SageMaker Studio, um die erforderlichen AWS-IAM-Richtlinien mit Ihrem Konto von SageMaker Studio zu verknüpfen, überspringen Sie dann Schritt 1 und fahren Sie direkt mit Schritt 2 fort. 

Wenn Sie keine bestehende SageMaker-Studio-Domäne haben, fahren Sie mit Schritt 1 fort, um eine AWS-CloudFormation-Vorlage auszuführen, die eine SageMaker-Studio-Domäne erstellt und die für den Rest dieses Tutorials erforderlichen Berechtigungen hinzufügt.

Wählen Sie den Link für AWS-CloudFormation-Stack. Dieser Link öffnet die AWS-CloudFormation-Konsole und erstellt Ihre SageMaker-Studio-Domäne und einen Benutzer namens studio-user. Er fügt auch die erforderlichen Berechtigungen zu Ihrem Konto von SageMaker Studio hinzu. Bestätigen Sie in der CloudFormation-Konsole, dass USA Ost (Nord-Virginia) die Region ist, die in der oberen rechten Ecke angezeigt wird. Der Stack-Name sollte CFN-SM-IM-Lambda-catalog lauten und sollte nicht geändert werden. Dieser Stack benötigt etwa 10 Minuten, um alle Ressourcen zu erstellen.

Dieser Stack geht davon aus, dass Sie bereits eine öffentliche VPC in Ihrem Konto eingerichtet haben. Wenn Sie keine öffentliche VPC haben, lesen Sie VPC mit einem einzigen öffentlichen Subnetz, um zu erfahren, wie Sie eine öffentliche VPC erstellen können. 

Wählen Sie Ich bestätige, dass AWS CloudFormation möglicherweise IAM-Ressourcen erstellt und wählen Sie dann Stack erstellen.

Wählen Sie im Bereich CloudFormation die Option Stacks. Es dauert etwa 10 Minuten, bis der Stack erstellt ist. Wenn der Stack erstellt wird, ändert sich der Status des Stacks von CREATE_IN_PROGRESS zu CREATE_COMPLETE

Schritt 2: Einrichten eines SageMaker-Studio-Notebooks

In diesem Schritt starten Sie ein neues SageMaker-Studio-Notebook, installieren die erforderlichen Open-Source-Bibliotheken und richten die SageMaker-Variablen ein, die für die Interaktion mit anderen Services, einschließlich Amazon Simple Storage Service (Amazon S3), erforderlich sind.

Geben Sie SageMaker Studio in die Suchleiste der Konsole ein und wählen Sie dann SageMaker Studio.

Wählen Sie USA Ost (Nord-Virginia) aus der Dropdown-Liste Region in der oberen rechten Ecke der Konsole aus. Wählen Sie für Anwendung starten die Option Studio, um SageMaker Studio mit dem studio-user-Profil zu öffnen.

Öffnen Sie die Oberfläche von SageMaker Studio. Wählen Sie in der Navigationsleiste Datei, Neu, Notebook

Wählen Sie im Dialogfeld Notebook-Umgebung einrichten unter Image die Option Datenwissenschaft. Der Python-3-Kernel wird automatisch ausgewählt. Wählen Sie Auswählen aus. 

Der Kernel in der oberen rechten Ecke des Notizbuchs sollte nun Python 3 (Datenwissenschaft) anzeigen.

Kopieren Sie den folgenden Codeschnipsel und fügen Sie ihn in eine Zelle des Notebooks ein. Drücken Sie Umschalt+Eingabe, um die aktuelle Zelle auszuführen und die aiobotocore-Bibliothek zu aktualisieren, welche eine API zur Interaktion mit vielen AWS-Services ist und installieren Sie die XGBoost-Bibliothek. Ignorieren Sie alle Warnungen, den Kernel neu zu starten, und alle Fehlermeldungen zu Abhängigkeitskonflikten.

%pip install --upgrade -q aiobotocore
%pip install -q  xgboost==1.3.1

Sie müssen auch das S3-Client-Objekt und die Speicherorte innerhalb Ihres Standard-S3-Buckets instanzieren, in welches die Metriken und Modell-Artefakte hochgeladen werden. Kopieren Sie dafür den folgenden Codeblock, fügen Sie ihn ein und führen Sie die Zelle aus. Beachten Sie, dass der Name des Schreib-Buckets aus dem SageMaker-Sitzungsobjekt abgeleitet ist. Ihr Standard-Bucket hat den Namen sagemaker-<your-Region>-<your-account-id>. In diesen Bucket werden alle Trainingsartefakte hochgeladen. Die Datensätze, die Sie für das Training verwenden, befinden sich in einem öffentlichen S3-Bucket namens sagemaker-sample-files, welcher als Lese-Bucket festgelegt wurde. Der Ort innerhalb des Buckets wird durch das Lesepräfix angegeben.

import pandas as pd
import boto3
import sagemaker
import json
import joblib
import xgboost as xgb
from sklearn.metrics import roc_auc_score

# Set SageMaker and S3 client variables
sess = sagemaker.Session()

region = sess.boto_region_name
s3_client = boto3.client("s3", region_name=region)

sagemaker_role = sagemaker.get_execution_role()

# Set read and write S3 buckets and locations
write_bucket = sess.default_bucket()
write_prefix = "fraud-detect-demo"

read_bucket = "sagemaker-sample-files"
read_prefix = "datasets/tabular/synthetic_automobile_claims" 

train_data_key = f"{read_prefix}/train.csv"
test_data_key = f"{read_prefix}/test.csv"
model_key = f"{write_prefix}/model"
output_key = f"{write_prefix}/output"

train_data_uri = f"s3://{read_bucket}/{train_data_key}"
test_data_uri = f"s3://{read_bucket}/{test_data_key}"

Schritt 3: Trainieren eines XGBoost-Modells

In diesem Schritt richten Sie ein binäres XGBoost-Klassifizierungsmodell ein, trainieren es auf dem synthetischen Datensatz für Kfz-Versicherungsansprüche und bewerten die Leistung des Modells. Sie verwenden die Spalte mit dem Namen Betrug als Zielspalte. Das Ziel ist es, einen binären XGBoost-Klassifikator zu trainieren, der in der Lage ist, betrügerische Ansprüche von legitimen Ansprüchen zu unterscheiden und die Leistung des Basismodells zu messen.


Das Open-Source-Framework XGBoost stellt verschiedene Hyperparameter zur Verfügung, die zur Steuerung der Modellleistung verwendet werden können. Für die Zwecke dieses Tutorials werden einige der wichtigsten Hyperparameter festgelegt und die Fläche unter der Receiver Operating Characteristic Area Under the Curve (ROC-AUC) als Bewertungsmaßstab gewählt. Kopieren Sie den folgenden Codeblock, fügen Sie ihn in eine Zelle ein und führen Sie ihn aus, um ein XGBoost-Modell kreuzweise zu validieren und zu trainieren. 

hyperparams = {
                "max_depth": 3,
                "eta": 0.2,
                "objective": "binary:logistic",
                "subsample" : 0.8,
                "colsample_bytree" : 0.8,
                "min_child_weight" : 3
              }

num_boost_round = 100
nfold = 3
early_stopping_rounds = 10



# Set up data input
label_col = "fraud"
data = pd.read_csv(train_data_uri)

# Read training data and target
train_features = data.drop(label_col, axis=1)
train_label = pd.DataFrame(data[label_col])
dtrain = xgb.DMatrix(train_features, label=train_label)

# Cross-validate on training data
cv_results = xgb.cv(
    params=hyperparams,
    dtrain=dtrain,
    num_boost_round=num_boost_round,
    nfold=nfold,
    early_stopping_rounds=early_stopping_rounds,
    metrics=["auc"],
    seed=10,
)


metrics_data = {
    "binary_classification_metrics": {
        "validation:auc": {
            "value": cv_results.iloc[-1]["test-auc-mean"],
            "standard_deviation": cv_results.iloc[-1]["test-auc-std"]
        },
        "train:auc": {
            "value": cv_results.iloc[-1]["train-auc-mean"],
            "standard_deviation": cv_results.iloc[-1]["train-auc-std"]
        },
    }
}


print(f"Cross-validated train-auc:{cv_results.iloc[-1]['train-auc-mean']:.2f}")
print(f"Cross-validated validation-auc:{cv_results.iloc[-1]['test-auc-mean']:.2f}")

Die kreuzweise validierten Trainings- und Validierungs-AUC-Werte werden angezeigt, nachdem Sie die Zelle ausgeführt haben. Ihre Ergebnisse können aufgrund der stochastischen Natur des Modellbildungsprozesses leicht abweichen. Allerdings deutet der Unterschied zwischen Trainings- und Testleistung darauf hin, dass das Modell angesichts der gewählten Hyperparameterkombinationen den Trainingsdatensatz höchstwahrscheinlich übererfüllt. Als Datenwissenschaftler können Sie diese Einsichten nutzen, um das Modell zu verfeinern, bevor Sie es in vollem Umfang trainieren.

Sobald Sie die kreuzweise validierte Leistung gemessen haben, können Sie, anstatt den Trainingsdatensatz auf mehrere Folds aufzuteilen, das Modell auf dem gesamten Trainingsdatensatz neu trainieren, während Sie den Testdatensatz zum frühzeitigen Stoppen verwenden. Ein frühzeitiges Stoppen hilft, die Komplexität des Modells zu kontrollieren und reduziert die Überanpassung. Kopieren Sie den folgenden Codeblock und fügen Sie ihn ein, um die Trainings- und Testdatensätze erneut zu trainieren und auszuwerten. Beachten Sie, dass Umtrainierung im lokalen Modus bedeutet, dass der Datensatz von Amazon S3 in die lokale Instance-Umgebung von SageMaker Studio gezogen wird. Die Instance von SageMaker Studio sollte über ausreichend Speicherplatz verfügen, um Daten lokal zu speichern.

data = pd.read_csv(test_data_uri)
test_features = data.drop(label_col, axis=1)
test_label = pd.DataFrame(data[label_col])
dtest = xgb.DMatrix(test_features, label=test_label)

model = (xgb.train(params=hyperparams, dtrain=dtrain, evals = [(dtrain,'train'), (dtest,'eval')], num_boost_round=num_boost_round, 
                  early_stopping_rounds=early_stopping_rounds, verbose_eval = 0)
        )

# Test model performance on train and test sets
test_pred = model.predict(dtest)
train_pred = model.predict(dtrain)

test_auc = roc_auc_score(test_label, test_pred)
train_auc = roc_auc_score(train_label, train_pred)

print(f"Train-auc:{train_auc:.2f}, Test-auc:{test_auc:.2f}")

Dies schließt das Training und die Evaluierung eines binären Klassifikationsmodells für den Datensatz der Autoversicherungsansprüche ab. Kopieren Sie den folgenden Codeblock und fügen Sie ihn ein, um die Bewertungsmetriken als JSON-Datei und das trainierte Modell als Pickle-Datei zu speichern. Der Code speichert sowohl in das lokale Verzeichnis in SageMaker Studio als auch in Ihren Standard-S3-Bucket.

# Save model and performance metrics locally

with open("./metrics.json", "w") as f:
    json.dump(metrics_data, f)

with open("./xgboost-model", "wb") as f:
    joblib.dump(model, f)    
    
# Upload model and performance metrics to S3

metrics_location = output_key + "/metrics.json"
model_location = model_key + "/xgboost-model"

s3_client.upload_file(Filename="./metrics.json", Bucket=write_bucket, Key=metrics_location)
s3_client.upload_file(Filename="./xgboost-model", Bucket=write_bucket, Key=model_location)

Schritt 4: Bereinigung der Ressourcen

Es ist eine bewährte Methode, Ressourcen zu löschen, die Sie nicht mehr verwenden, damit Ihnen keine unbeabsichtigten Kosten entstehen.

Um den S3-Bucket zu löschen, machen Sie Folgendes: 

  • Öffnen Sie die Amazon-S3-Konsole. Wählen Sie in der Navigationsleiste Buckets, sagemaker-<your-Region>-<your-account-id>, und aktivieren Sie dann das Kontrollkästchen neben fraud-detect-demo. Wählen Sie dann Löschen
  • Im Dialogfeld Objekte löschen vergewissern Sie sich, dass Sie das richtige Objekt zum Löschen ausgewählt haben, und geben Sie dauerhaft löschen im Bestätigungsfeld Objekte dauerhaft löschen ein. 
  • Wenn der Vorgang abgeschlossen und der Bucket leer ist, können Sie den Bucket sagemaker-<your-Region>-<your-account-id> löschen, indem Sie das gleiche Verfahren erneut durchführen.

Der Datenwissenschaftliche Kernel, der für die Ausführung des Notebook-Images in diesem Tutorial verwendet wird, sammelt Gebühren an, bis Sie entweder den Kernel stoppen oder die folgenden Schritte ausführen, um die Anwendungen zu löschen. Weitere Informationen finden Sie unter Herunterfahren von Ressourcen im Entwicklerhandbuch für Amazon SageMaker.

Gehen Sie wie folgt vor, um die SageMaker-Studio-Anwendungen zu löschen: Wählen Sie in der SageMaker-Studio-Konsole studio-user und löschen Sie dann alle unter Anwendungen aufgeführten Anwendungen, indem Sie Anwendung löschen wählen. Warten Sie, bis der Status auf Gelöscht wechselt.

Wenn Sie in Schritt 1 eine bestehende SageMaker-Studio-Domäne verwendet haben, überspringen Sie den Rest von Schritt 4 und fahren Sie direkt mit dem Abschnitt Abschluss fort. 

Wenn Sie die CloudFormation-Vorlage in Schritt 1 ausgeführt haben, um eine neue SageMaker-Studio-Domäne zu erstellen, fahren Sie mit den folgenden Schritten fort, um die Domäne, den Benutzer und die von der CloudFormation-Vorlage erstellten Ressourcen zu löschen.  

Um die CloudFormation-Konsole zu öffnen, geben Sie CloudFormation in die Suchleiste der AWS-Konsole ein, und wählen Sie CloudFormation aus den Suchergebnissen aus.

Wählen Sie im Bereich CloudFormation die Option Stacks. Wählen Sie in der Dropdown-Liste Status die Option Aktiv. Wählen Sie unter Stackname die Option CFN-SM-IM-Lambda-catalog, um die Seite mit den Stackdetails zu öffnen.

Wählen Sie auf der Seite CFN-SM-IM-Lambda-catalog Stack-Details die Option Löschen, um den Stack zusammen mit den in Schritt 1 erstellten Ressourcen zu löschen.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Tutorial Erstellen und Trainieren eines Machine-Learning-Modells vor Ort abgeschlossen. 

Sie haben in diesem Tutorial Amazon SageMaker Studio verwendet, um lokal ein binäres Klassifizierungsmodell mit der Open-Source-Bibliothek XGBoost zu erstellen und die Modellartefakte und Ausgaben in Amazon S3 zu speichern. Wie in diesem Tutorial dargestellt, können Sie mit schnellem Prototyping in SageMaker Studio die Modellleistung und potenzielle Overfitting-Probleme beurteilen, bevor Sie das Modell mit dem vollständigen Datensatz trainieren.

Sie können Ihre Machine-Learning-Reise mit Amazon SageMaker fortsetzen, indem Sie dem Abschnitt Nächste Schritte unten folgen.

War diese Seite hilfreich?

Nächste Schritte