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

XGBoost (eXtreme Gradient Boosting) ist eine beliebte und effiziente Open-Source-Implementierung eines 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 ist aufgrund seiner robusten Verarbeitung zahlreicher Datentypen, Beziehungen und Verteilungen und der Vielzahl von optimierbaren Hyperparametern gut für Machine Learning-Wettbewerbe geeignet. Sie können XGBoost für Regressions-, Binär- und Multiclass-Klassifizierungs- und Ranglistenprobleme verwenden.

Sie können die neue Version des XGBoost-Algorithmus als in Amazon SageMaker oder als Framework für die Ausführung von Schulungsskripts 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 bietet auch einen XGBoost estimator, 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, 1.2 und 1.3.

Unterstützte Versionen

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

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

Warnung

Die XGBoost 0.90 Version wird am 31. Dezember 2021 veraltet sein. Unterstützungen für Sicherheitsupdates oder Fehlerbehebungen für XGBoost 0.90 werden nach diesem Datum eingestellt. Es wird dringend empfohlen, die XgBoost-Version auf eine der neueren Versionen (1.0-1 oder höher) vor dem Verwerfen zu aktualisieren.

Anmerkung

XGBoost 1.1 wird auf SageMaker nicht unterstützt, da XGBoost 1.1 eine defekte Fähigkeit hat, Vorhersagen auszuführen, wenn die Testeingabe weniger Funktionen hat als die Trainingsdaten in LIBSVM-Eingängen. Diese Funktion wurde in XGBoost 1.2 wiederhergestellt. Erwägen Sie, SageMaker XGBoost 1.2-2 oder höher zu verwenden.

Verwendung von SageMaker XGBoost

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

  • Verwenden von XGBoost als Framework

    Sie können XGBoost als Framework zum Ausführen angepasster Trainingsskripts verwenden, die eine zusätzliche Datenverarbeitung in Ihre Trainingsaufgaben integrieren können. Im folgenden Codebeispiel sehen Sie, dass SageMaker Python SDK die XGBoost-API auf die gleiche Weise als Framework bereitstellt 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", "verbosity":"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-2', 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 = 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", "verbosity":"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-2', 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 mit Amazon SageMaker XGBoost.

  • Verwenden von XGBoost als integrierten Algorithmus

    Sie können den integrierten XGBoost-Algorithmus zur Erstellung eines XGBoost-Trainingscontainers verwenden wie im folgenden Codebeispiel gezeigt. Sie können den integrierten Image-URI des XGBoost-Algorithmus mit dem SageMaker automatisch erkennenimage_uris.retrieveAPI (oder dieget_image_uri-API, wenn SieAmazon SageMaker Python SDKVersion 1). Wenn Sie überprüfen möchten, ob die image_uris.retrieve-API den richtigen URI findet, navigieren Sie zu Allgemeine Parameter für integrierte Algorithmen und suchen in der vollständigen Liste der Image-URIs integrierter Algorithmen und verfügbaren Regionen nach xgboost.

    Nachdem Sie den Image-URI von XGBoost angegeben haben, können Sie den XGBoost-Container verwenden, um mithilfe der SageMaker Estimator-API einen Estimator zu konstruieren und eine Trainingsaufgabe zu initiieren. Dieser integrierte XGBoost-Algorithmusmodus integriert nicht Ihr XGBoost-Trainingsskript und wird direkt auf den Eingabedatensätzen 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-2') # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_name=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, 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-2") # 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 Schulungen und Inferenzen:

  • Für den Schulungs-ContentType ist text/libsvm (Standardwert) oder text/csv eine gültige Eingabe.

  • Für den Inferenz-ContentType ist text/libsvm (Standardwert) oder text/csv eine gültige Eingabe.

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 für Schulungen das protobuf-Eingabeformat verwenden, um eine größere Konsistenz hinsichtlich der XGBoost-Datenformate zu erzielen.

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 zur Modellserialisierung/-deserialisierung, die 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 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.

  • Mit SageMaker XGBoost können Kunden die Bedeutung von markierten Datenendpunkten 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 unter Verwendung von CPUs. Es handelt sich um einen speichergebundenen Algorithmus (im Gegensatz zu einem rechnergebundenen). 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 GPU-Instance. Trotz höherer Kosten pro Instance schulen GPUs schneller und sind damit kostengünstiger. Um die GPU-Training nutzen zu können, geben Sie den Instanztyp als eine der GPU-Instanzen an (z. B.tree_methodHyperparametergpu_histin Ihrem vorhandenen XGBoost-Skript. SageMaker unterstützt aktuell kein Multi-GPU-Training.

XGBoost-Beispiel-Notebooks

Die folgende Tabelle enthält eine Vielzahl von Beispiel-Notizbüchern, die verschiedene Anwendungsfälle des Amazon SageMaker XGBoost-Algorithmus behandeln.

Notizbuchtitel Beschreibung

Wie erstelle ich einen benutzerdefinierten XGBoost-Container?

Dieses Notizbuch zeigt Ihnen, wie Sie einen benutzerdefinierten XGBoost Container mit Amazon SageMaker Batch Transform erstellen.

Einführung in die Feature-Verarbeitung, Schulung und Inferenz

Dieses Notizbuch zeigt Ihnen, wie Sie mit Spark Feature Transformers eine Machine Learning (ML) -Pipeline erstellen und Echtzeit-Inferenz mit Amazon SageMaker Batch Transform durchführen.

Regression mit XGBoost mit Parkett

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

Wie trainieren und hosten Sie ein Multiclass-Klassifizierungsmodell?

Dieses Notizbuch zeigt, wie das MNIST-Dataset zum Trainieren und Hosten eines Multiklassifizierungsmodells verwendet wird.

Wie trainiere ich ein Modell für Customer Churn Prediction?

Dieses Notizbuch zeigt Ihnen, wie Sie ein Modell mit Predict Mobile Customer Departure trainieren, um unglückliche Kunden zu identifizieren.

Einführung in die Amazon SageMaker Managed Spot-Infrastruktur für XGBoost Schulungen

Dieses Notizbuch zeigt Ihnen, wie Sie Spot Instances für das Training mit einem XGBoost Container verwenden.

Wie verwende ich Amazon SageMaker Debugger, um XGBoost Schulungsaufträge zu debuggen?

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

Wie verwende ich Amazon SageMaker Debugger, um XGBoost Schulungsaufträge in Echtzeit zu debuggen?

In diesem Notizbuch erfahren Sie, wie Sie das MNIST-Dataset und den Amazon SageMaker Debugger zur Echtzeitanalyse von XGBoost-Schulungsaufträgen verwenden, während Schulungsaufträge ausgeführt werden.

Anweisungen zum Erstellen von 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-Instancesaus. Nachdem Sie eine Notebook-Instance erstellt und geöffnet haben, wählen Sie dieBeispiele für SageMakerfinden Sie eine Liste aller SageMaker Beispiele. 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.