CatBoost - 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.

CatBoost

CatBoostist eine beliebte und leistungsstarke Open-Source-Implementierung des Gradient Boosting Decision Tree (GBDT) -Algorithmus. GBDT ist ein überwachter Lernalgorithmus, der versucht, eine Zielvariable genau vorherzusagen, indem Schätzungen aus einer Menge einfacherer und schwächerer Modelle kombiniert werden.

CatBoost führt zwei wichtige algorithmische Verbesserungen für GBDT ein:

  1. Die Implementierung von Ordered Boosting, einer permutationsgesteuerten Alternative zum klassischen Algorithmus

  2. Ein innovativer Algorithmus zur Verarbeitung kategorischer Features

Beide Techniken wurden entwickelt, um einer Verschiebung der Voraussage entgegenzuwirken, die durch eine besondere Art von Zielleckage verursacht wird, die in allen derzeit vorhandenen Implementierungen von Gradienten-Boosting-Algorithmen auftritt.

Wie benutzt man SageMaker CatBoost

Sie können den SageMaker integrierten Algorithmus von Amazon verwenden CatBoost . Im folgenden Abschnitt wird die Verwendung CatBoost mit dem SageMaker Python-SDK beschrieben. Informationen zur Verwendung CatBoost von der Amazon SageMaker Studio Classic-Benutzeroberfläche aus finden Sie unterTrainieren, implementieren und evaluieren Sie vortrainierte Modelle mit SageMaker JumpStart.

  • CatBoost Als integrierten Algorithmus verwenden

    Verwenden Sie den CatBoost integrierten Algorithmus, um einen CatBoost Trainingscontainer zu erstellen, wie im folgenden Codebeispiel gezeigt. Sie können den CatBoost integrierten Algorithmus-Image-URI mithilfe der SageMaker image_uris.retrieve API (oder der get_image_uri API, wenn Sie Amazon SageMaker Python SDK Version 2 verwenden) automatisch erkennen.

    Nachdem Sie die CatBoost Bild-URI angegeben haben, können Sie den CatBoost Container verwenden, um mithilfe der Estimator-API einen SageMaker Schätzer zu erstellen und einen Trainingsjob zu starten. Der CatBoost integrierte Algorithmus wird im Skriptmodus ausgeführt, aber das Trainingsskript wird für Sie bereitgestellt und muss nicht ersetzt werden. Wenn Sie umfangreiche Erfahrung mit der Erstellung eines SageMaker Trainingsjobs im Skriptmodus haben, können Sie Ihre eigenen CatBoost Trainingsskripte integrieren.

    from sagemaker import image_uris, model_uris, script_uris train_model_id, train_model_version, train_scope = "catboost-classification-model", "*", "training" training_instance_type = "ml.m5.xlarge" # Retrieve the docker image train_image_uri = image_uris.retrieve( region=None, framework=None, model_id=train_model_id, model_version=train_model_version, image_scope=train_scope, instance_type=training_instance_type ) # Retrieve the training script train_source_uri = script_uris.retrieve( model_id=train_model_id, model_version=train_model_version, script_scope=train_scope ) train_model_uri = model_uris.retrieve( model_id=train_model_id, model_version=train_model_version, model_scope=train_scope ) # Sample training data is available in this bucket training_data_bucket = f"jumpstart-cache-prod-{aws_region}" training_data_prefix = "training-datasets/tabular_multiclass/" training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train" validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation" output_bucket = sess.default_bucket() output_prefix = "jumpstart-example-tabular-training" s3_output_location = f"s3://{output_bucket}/{output_prefix}/output" from sagemaker import hyperparameters # Retrieve the default hyperparameters for training the model hyperparameters = hyperparameters.retrieve_default( model_id=train_model_id, model_version=train_model_version ) # [Optional] Override default hyperparameters with custom values hyperparameters[ "iterations" ] = "500" print(hyperparameters) from sagemaker.estimator import Estimator from sagemaker.utils import name_from_base training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training") # Create SageMaker Estimator instance tabular_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location ) # Launch a SageMaker Training job by passing the S3 path of the training data tabular_estimator.fit( { "training": training_dataset_s3_path, "validation": validation_dataset_s3_path, }, logs=True, job_name=training_job_name )

    Weitere Informationen zur Einrichtung CatBoost eines integrierten Algorithmus finden Sie in den folgenden Notebook-Beispielen.

Eingabe- und Ausgabeschnittstelle für den Algorithmus CatBoost

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

Die SageMaker Implementierung von CatBoost unterstützt CSV für Training und Inferenz:

  • Für Schulungen müssen ContentType die gültigen Eingaben text/csv sein.

  • Für Inference ContentType müssen gültige Eingaben text/csv sein.

Anmerkung

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

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

Eingabeformat für Trainingsdaten, Validierungsdaten und kategoriale Features

Achten Sie darauf, wie Sie Ihre Trainingsdaten für die Eingabe in das Modell formatieren. CatBoost Sie müssen den Pfad zu einem Amazon-S3-Bucket angeben, der Ihre Trainings- und Validierungsdaten enthält. Sie können auch eine Liste von kategorialen Funktionen einschließen. Verwenden Sie sowohl training als auch den validation Kanal, um Ihre Eingabedaten bereitzustellen. Alternativ können Sie aber auch nur den training Kanal verwenden.

Verwenden Sie sowohl den training als auch den validation Kanal

Sie können Ihre Eingabedaten über zwei S3-Pfade bereitstellen, einen für den training Kanal und einen für den validation Kanal. Jeder S3-Pfad kann entweder ein S3-Präfix sein, das auf eine oder mehrere CSV-Dateien verweist, oder ein vollständiger S3-Pfad, der auf eine bestimmte CSV-Datei verweist. Die Zielvariablen sollten sich in der ersten Spalte Ihrer CSV-Datei befinden. Die Prädiktorvariablen (Features) sollten sich in den verbleibenden Spalten befinden. Wenn mehrere CSV-Dateien für die validation Kanäle training oder bereitgestellt werden, verkettet der CatBoost Algorithmus die Dateien. Die Validierungsdaten werden verwendet, um am Ende jeder Boosting-Iteration eine Validierungspunktzahl zu berechnen. Early-Stopping wird angewendet, wenn sich der Validierungsscore nicht mehr verbessert.

Wenn Ihre Predictors kategorische Features enthalten, können Sie eine JSON-Datei bereitstellen, die categorical_index.json an derselben Stelle benannt ist wie Ihre Trainingsdatendatei (en). Wenn Sie eine JSON-Datei für kategorische Features bereitstellen, muss Ihr training-Kanal auf ein S3-Präfix verweisen und nicht auf eine spezifische CSV-Datei. Diese Datei sollte ein Python-Wörterbuch enthalten, in dem der Schlüssel die Zeichenfolge "cat_index_list" und der Wert eine Liste eindeutiger Ganzzahlen ist. Jede Ganzzahl in der Werteliste sollte den Spaltenindex der entsprechenden kategorischen Features in Ihrer CSV-Datei mit Trainingsdaten angeben. Jeder Wert sollte eine positive Ganzzahl (größer als Null, weil Null den Zielwert darstellt), kleiner als Int32.MaxValue (2147483647) und kleiner als die Gesamtzahl der Spalten sein. Es sollte nur eine JSON-Datei mit dem kategorischen Index geben.

Benutze nur den training Kanal:

Sie können Ihre Eingabedaten alternativ über einen einzigen S3-Pfad für den training Kanal bereitstellen. Dieser S3-Pfad sollte auf ein Verzeichnis mit einem Unterverzeichnis mit dem Namen training/ verweisen, das eine oder mehrere CSV-Dateien enthält. Sie können optional ein weiteres Unterverzeichnis am selben Speicherort namens validation/ einschließen, das auch eine oder mehrere CSV-Dateien enthält. Wenn die Validierungsdaten nicht angegeben werden, werden 20% Ihrer Trainingsdaten nach dem Zufallsprinzip als Validierungsdaten ausgewählt. Wenn Ihre Predictors kategorische Features enthalten, können Sie eine JSON-Datei bereitstellen, die categorical_index.json an derselben Stelle benannt ist wie Ihre Datenunterverzeichnisse.

Anmerkung

Beim CSV-Trainingseingangsmodus muss der für den Algorithmus verfügbare Gesamtarbeitsspeicher (Instance-Zählung verfügbarer Arbeitsspeicher im InstanceType) in der Lage sein, den Trainingsdatensatz aufzunehmen.

SageMaker CatBoost verwendet die catboost.CatBoostRegressor Module catboost.CatBoostClassifier und, um das Modell zu serialisieren oder zu deserialisieren, was zum Speichern oder Laden des Modells verwendet werden kann.

Um ein Modell zu verwenden, das mit trainiert wurde SageMaker CatBoost catboost
  • Verwenden Sie den folgenden Python-Code:

    import tarfile from catboost import CatBoostClassifier t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() file_path = os.path.join(model_file_path, "model") model = CatBoostClassifier() model.load_model(file_path) # prediction with test data # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d pred = model.predict(dtest)

Amazon EC2 EC2-Instance-Empfehlung für den Algorithmus CatBoost

SageMaker CatBoost derzeit nur Züge, die CPUs verwenden. CatBoost ist ein speichergebundener (im Gegensatz zu rechengebundener) Algorithmus. Daher ist eine Allzweck-Datenverarbeitungs-Instance (z. B. M5) die bessere Wahl gegenüber einer für Datenverarbeitung optimierten Instance (z. B. C5). Des Weiteren empfehlen wir, dass Sie in ausgewählten Instances genügend Gesamtspeicher zur Verfügung haben, um das Trainingsdaten aufzunehmen.

CatBoost Beispiel-Notizbücher

In der folgenden Tabelle sind verschiedene Beispielnotizbücher aufgeführt, die sich mit verschiedenen Anwendungsfällen des SageMaker CatBoost Amazon-Algorithmus befassen.

Titel des Notebooks Beschreibung

Tabellarische Klassifizierung mit Amazon SageMaker LightGBM und Algorithmus CatBoost

Dieses Notizbuch demonstriert die Verwendung des SageMaker CatBoost Amazon-Algorithmus zum Trainieren und Hosten eines tabellarischen Klassifikationsmodells.

Tabellarische Regression mit Amazon SageMaker LightGBM und Algorithmus CatBoost

Dieses Notizbuch demonstriert die Verwendung des SageMaker CatBoost Amazon-Algorithmus zum Trainieren und Hosten eines tabellarischen Regressionsmodells.

Anweisungen zum Erstellen und Zugreifen auf Jupyter-Notebook-Instances, in denen Sie das Beispiel ausführen können, finden Sie unter. SageMaker Amazon SageMaker Notebook-Instances Nachdem Sie eine Notebook-Instanz erstellt und geöffnet haben, wählen Sie die Registerkarte SageMakerBeispiele, um eine Liste aller Beispiele anzuzeigen. SageMaker Zum Öffnen eines Notebooks wählen Sie die Registerkarte Verwenden und dann Kopie erstellen aus.