XGBoost-Algorithmus - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

XGBoost-Algorithmus

Das XGBoost (eXtreme Gradient Boosting) ist eine beliebte und effiziente Open-Source-Implementierung des Baumalgorithmus mit Gradient Boosting. Gradient Boosting ist ein überwachter Lernalgorithmus, der versucht, eine Zielvariable genau vorherzusagen, indem Schätzungen aus einer Menge einfacherer und schwächerer Modelle kombiniert werden. Der XGBoost-Algorithmus funktioniert aufgrund seiner robusten Verarbeitung einer Vielzahl von Datentypen, Beziehungen, Verteilungen und der Vielzahl von Hyperparametern, die Sie optimieren können, gut in Machine Learning-Wettbewerben. Sie können XGBoost für Regressions-, Klassifizierungs- (binäre und Mehrklassen-) und Rangfestlegungsprobleme verwenden.

Sie können die neue Version des XGBoost-Algorithmus entweder als in Amazon SageMaker integrierten Algorithmus oder als Framework zum Ausführen von Trainingsskripts in Ihren lokalen Umgebungen verwenden. Diese Implementierung bietet einen kleineren Speicherbedarf, eine bessere Protokollierung, eine verbesserte Hyperparameter-Validierung und einen größeren Satz von Metriken als die ursprünglichen Versionen. Sie stellt einen XGBoost estimator bereit, der ein Trainingsskript in einer verwalteten XGBoost-Umgebung ausführt. Die aktuelle Version von SageMaker XGBoost basiert auf den ursprünglichen XGBoost-Versionen 0.90, 1.0 und 1.2.

Unterstützte Versionen

  • Framework-Modus (Open-Source): 0.90-1, 0.90-2, 1.0-1, 1.2-1

  • Algorithmusmodus: 0.90-1, 0.90-2, 1.0-1, 1.2-1

Anmerkung

XGBoost 1.1 wird auf SageMaker nicht unterstützt, da XGBoost 1.1 eine unterbrochene Fähigkeit hat, Prognosen auszuführen, wenn die Testeingabe weniger Funktionen aufweist als die Schulungsdaten in LIBSVM-Eingaben. Diese Funktion wurde in XGBoost 1.2 wiederhergestellt. Ziehen Sie die Verwendung von SageMaker XGBoost 1.2-1 in Betracht.

So verwenden Sie SageMaker XGBoost

Mit SageMaker können Sie XGBoost als integrierten Algorithmus oder integriertes Framework verwenden. Durch die Verwendung von XGBoost als Framework haben Sie mehr Flexibilität und Zugriff auf erweiterte Szenarien, wie z. B. k-fache Kreuzvalidierung, da Sie Ihre eigenen Trainingsskripts anpassen können.

  • Verwenden von XGBoost als Framework

    Verwenden Sie XGBoost als Framework zum Ausführen Ihrer benutzerdefinierten Trainingsskripts, die eine zusätzliche Datenverarbeitung in Ihre Trainingsaufträge integrieren können. Im folgenden Codebeispiel finden Sie, wie das SageMaker-Python-SDK die XGBoost-API als Framework bereitstellt, auf die gleiche Weise wie andere Framework-APIs, z. B. TensorFlow, MXNet und PyTorch.

    SageMaker Python SDK v1
    import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import s3_input, Session # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbose":"1", "objective":"reg:linear", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", framework_version='1.2-1', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), train_instance_count=1, train_instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})
    SageMaker Python SDK v2
    import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbose":"1", "objective":"reg:linear", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", framework_version='1.2-1', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    Ein vollständiges Beispiel für die Verwendung von SageMaker XGBoost als Framework finden Sie unter Regression with Amazon SageMaker XGBoost.

  • Verwenden von XGBoost als integriertem Algorithmus

    Verwenden Sie den integrierten XGBoost-Algorithmus, um einen XGBoost-Trainingscontainer zu erstellen, wie im folgenden Codebeispiel gezeigt. Sie können den integrierten XGBoost-Algorithmus-Image-URI automatisch über die SageMaker image_uris.retrieve-API (oder die get_image_uri-API bei Verwendung von Amazon SageMaker Python SDK-Version 1) erkennen. Wenn Sie sicherstellen möchten, dass die image_uris.retrieve-API den richtigen URI findet, lesen Sie Allgemeine Parameter für integrierte Algorithmen und suchen Sie xgboost aus der vollständigen Liste der integrierten Algorithmus-Image URIs und verfügbaren Regionen.

    Nachdem Sie den XGBoost-Abbild-URI angegeben haben, können Sie den XGBoost-Container verwenden, um eine Schätzfunktion mithilfe der SageMaker Estimator-API zu erstellen und einen Schulungsauftrag zu initiieren. Dieser integrierte XGBoost-Algorithmusmodus enthält kein eigenes XGBoost-Schulungsskript und wird direkt auf den Eingabe-Datasets ausgeführt.

    SageMaker Python SDK v1
    import sagemaker import boto3 from sagemaker.amazon.amazon_estimator import get_image_uri from sagemaker.session import s3_input, Session # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = get_image_uri(boto3.Session().region_name, 'xgboost', repo_version='1.2-1') # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_name=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), train_instance_count=1, train_instance_type='ml.m5.2xlarge', train_volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})
    SageMaker Python SDK v2
    import sagemaker import boto3 from sagemaker import image_uris from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.2-1") # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    Weitere Informationen zum Einrichten von XGBoost als integriertem Algorithmus finden Sie in den folgenden Notebook-Beispielen.

E/A-Schnittstelle für den XGBoost-Algorithmus

Gradient Boosting arbeitet mit tabellarischen Daten, wobei die Zeilen die Beobachtungen repräsentieren, eine Spalte die Zielvariable oder die Kennzeichnung darstellt und die übrigen Spalten die Merkmale.

Die SageMaker-Implementierung von XGBoost unterstützt CSV- und libsvm-Formate für Schulung und Inferenz:

  • Für ContentType für Schulungen sind gültige Eingaben text/libsvm (Standard) oder text/csv.

  • Für Inferenz-ContentType sind gültige Eingaben text/libsvm (Standard) oder text/csv.

Anmerkung

Bei der CSV-Schulung geht der Algorithmus davon aus, dass die Zielvariable in der ersten Spalte zu finden ist und CSV keinen Header-Eintrag aufweist.

Bei der CSV-Inferenz geht der Algorithmus davon aus, dass die CSV-Eingabe keine Kennzeichnungsspalte hat.

Für libsvm-Schulungen geht der Algorithmus davon aus, dass sich die Bezeichnung in der ersten Spalte befindet. Nachfolgende Spalten enthalten die nullbasierten Index-Wert-Paare für Funktionen. Folglich hat jede Zeile das Format: <label> <index0>:<value0> <index1>:<value1> ... Inferenzanforderungen für libsvm besitzen möglicherweise keine Bezeichnungen im libsvm-Format.

Dies unterscheidet sich von anderen SageMaker-Algorithmen, die das protobuf-Schulungseingabeformat verwenden, um eine größere Konsistenz mit den XGBoost-Standarddatenformaten zu gewährleisten.

Beim CSV-Eingabemodus für Schulungen muss der für den Algorithmus verfügbare Gesamtspeicher (Instance-Zählung *verfügbarer Speicher im InstanceType) in der Lage sein, den Schulungsdatensatz aufzunehmen. Für den libsvm-Schulungseingabemodus ist dies nicht erforderlich, aber empfehlenswert.

SageMaker XGBoost verwendet das Python-Pickle-Modul zum Serialisieren/Deserialisieren des Modells, das zum Speichern/Laden des Modells verwendet werden kann.

So verwenden Sie ein mit SageMaker XGBoost geschultes Modell in Open-Source-XGBoost:

  • Verwenden Sie den folgenden Python-Code:

    import pickle as pkl import tarfile import xgboost t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() model = pkl.load(open(model_file_path, 'rb')) # prediction with test data pred = model.predict(dtest)

Zur Differenzierung der Bedeutung von markierten Datenpunkten verwenden Sie die Instance-Gewichtungsunterstützung.

  • SageMaker XGBoost ermöglicht es Kunden, die Bedeutung von gekennzeichneten Datenpunkten zu differenzieren, indem jeder Instance ein Gewichtungswert zugewiesen wird. Für text/libsvm-Eingaben können Kunden Daten-Instances Gewichtungswerte zuweisen, indem Sie sie nach den Bezeichnungen anfügen. Beispiel: label:weight idx_0:val_0 idx_1:val_1.... Für text/csv-Eingaben müssen Kunden das csv_weights-Flag in den Parametern aktivieren und Gewichtungswerte in der Spalte nach den Bezeichnungen anfügen. Beispiel: label,weight,val_0,val_1,...: ).

EC2-Instance-Empfehlung für den XGBoost-Algorithmus

SageMaker XGBoost 1.0-1 oder früher schult derzeit nur mit CPUs. Es handelt sich um einen speichergebundenen Algorithmus (im Gegensatz zu einem rechnergebundenen Algorithmus). Daher ist eine Allzweck-Datenverarbeitungs-Instance (z. B. M5) die bessere Wahl gegenüber einer rechneroptimierten Instance (z. B. C4). Des Weiteren empfehlen wir, dass Sie in ausgewählten Instances genügend Gesamtspeicher zur Verfügung haben, um die Schulungsdaten aufzunehmen. Zwar wird die Speicherplatznutzung für die Verarbeitung von Daten, die nicht in den Arbeitsspeicher passen (das out-of-Core-Merkmal mit dem libsvm-Eingabemodus) unterstützt, aber das Schreiben von Cache-Dateien auf die Festplatte verlangsamt die Verarbeitungszeit des Algorithmus.

SageMaker XGBoost Version 1.2 oder höher unterstützt Single-Instance-GPU-Schulungen. Trotz der höheren Kosten pro Instance schult GPUs schneller und ist damit kostengünstiger. Um die Vorteile der GPU-Schulung zu nutzen, geben Sie den Instance-Typ als eine der GPU-Instances an (z. B. P3) und legen Sie den tree_method-Hyperparameter in Ihrem vorhandenen gpu_hist-Skript auf XGBoost fest. SageMaker unterstützt derzeit keine Multi-GPU-Schulung.

XGBoost-Beispiel-Notebooks

Die folgende Tabelle enthält eine Vielzahl von Beispiel-Notebooks für verschiedene Anwendungsfälle des Amazon SageMaker XGBoost-Algorithmus.

Notebook-Titel Beschreibung

Wie erstellen Sie einen benutzerdefinierten XGBoost-Container?

Dieses Notebook zeigt Ihnen, wie Sie einen benutzerdefinierten XGBoost-Container mit Amazon SageMaker-Stapeltransformation erstellen.

Eine Einführung in die Funktionsverarbeitung, Schulung und Inferenz

Dieses Notebook zeigt Ihnen, wie Sie eine Machine Learning (ML)-Pipeline mit Spark-Funktionstransformationen erstellen und Echtzeitinferenzen mit Amazon SageMaker Batch Transform durchführen.

Regression mit XGBoost unter Verwendung von Parquet

Dieses Notebook zeigt Ihnen, wie Sie das Abalone-Dataset in Parquet verwenden, um ein XGBoost-Modell zu schulen.

Schulen und Hosten eines Mehrklassen-Klassifizierungsmodells

Dieses Notebook zeigt, wie Sie das MNIST-Dataset verwenden, um ein Mehrklassen-Klassifizierungsmodell zu schulen und zu hosten.

Wie wird ein Modell für Kundenabwanderungsprognosen geschult?

In diesem Notebook erfahren Sie, wie Sie ein Modell schulen, um Mobile-Kundenvoraussagen zu erstellen, um unzufriedene Kunden zu identifizieren.

Eine Einführung in die von Amazon SageMaker verwaltete Spot-Infrastruktur für XGBoost-Schulungen

Dieses Notebook zeigt Ihnen, wie Sie Spot-Instances für Schulungen mit einem XGBoost-Container verwenden können.

Vorgehensweise zum Debuggen von Amazon SageMaker-Schulungsaufträgen mit XGBoost Debuggen

Dieses Notebook zeigt Ihnen, wie Sie mit Amazon SageMaker Debugger Schulungsaufträge überwachen, um Inkonsistenzen zu erkennen.

Wie wird Amazon SageMaker Debugger zum Debuggen von XGBoost-Schulungsaufträgen in Echtzeit verwendet?

Dieses Notebook zeigt Ihnen, wie Sie das MNIST-Dataset und den Amazon SageMaker-Debugger verwenden, um Echtzeitanalysen von XGBoost-Schulungsaufträgen durchzuführen, während Schulungsaufträge ausgeführt werden.

Anweisungen zum Erstellen und Zugreifen auf Jupyter-Notebook-Instances, die Sie verwenden können, um das Beispiel in SageMaker auszuführen, finden Sie unter Verwenden von Amazon SageMaker-Notebook-Instances. Nachdem Sie eine Notebook-Instance erstellt und geöffnet haben, wählen Sie die Registerkarte -BeispieleSageMaker aus, um eine Liste aller -Beispiele anzuzeigen.SageMaker Die Beispiel-Notebooks zur Themenmodellierung unter Verwendung des Algorithmus für lineares Lernen finden Sie im Abschnitt Einführung in die Amazon-Algorithmen. Zum Öffnen eines Notebooks wählen Sie die Registerkarte Use (Verwenden) und dann Create copy (Kopie erstellen) aus.