CatBoost - Amazon SageMaker

CatBoost

CatBoost est une implémentation open source populaire et hautement performante de l'algorithme d'arbre de décision avec renforcement de gradient (algorithme GBDT). L'algorithme GBDT est un algorithme d'apprentissage supervisé qui tente de prédire avec précision une variable cible en combinant un ensemble d'estimations à partir d'un jeu de modèles plus simples et plus faibles.

CatBoost introduit deux avancées algorithmiques critiques par rapport aux algorithmes GBDT :

  1. L'implémentation d'un renforcement ordonné, une alternative à l'algorithme classique axée sur la permutation

  2. Un algorithme innovant pour le traitement des caractéristiques catégorielles

Les deux techniques ont été créées pour lutter contre un changement de prédiction causé par un type particulier de fuite de cible présent dans toutes les implémentations existantes des algorithmes avec renforcement de gradient.

Utilisation de CatBoost dans SageMaker

Vous pouvez utiliser CatBoost comme un algorithme intégré dans Amazon SageMaker. La section suivante explique comment utiliser CatBoost avec le kit SDK Python SageMaker. Pour plus d'informations sur l'utilisation de CatBoost à partir de l'interface utilisateur d'Amazon SageMaker Studio, consultez SageMaker JumpStart.

  • Utilisation de CatBoost en tant qu'algorithme intégré

    Utilisez l'algorithme intégré CatBoost pour créer un conteneur d'entraînement CatBoost comme indiqué dans l'exemple de code suivant. Vous pouvez repérer automatiquement l'URI d'image de l'algorithme intégré CatBoost à l'aide de l'API image_uris.retrieve SageMaker (ou de l'API get_image_uri si vous utilisez le kit SDK Python pour Amazon SageMaker version 2).

    Après avoir spécifié l'URI d'image CatBoost, vous pouvez utiliser le conteneur CatBoost pour construire un évaluateur à l'aide de l'API SageMaker Estimator et lancer une tâche d'entraînement. L'algorithme intégré CatBoost s'exécute en mode script, mais le script d'entraînement vous est fourni et n'a pas besoin d'être remplacé. Si vous avez une vaste expérience de l'utilisation du mode script pour créer une tâche d'entraînement SageMaker, vous pouvez intégrer vos propres scripts d'entraînement CatBoost.

    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}" 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 hyper-parameters 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}, logs=True, job_name=training_job_name )

    Pour plus d'informations sur la configuration de CatBoost en tant qu'algorithme intégré, consultez les exemples de bloc-notes suivants.

Interface d'entrée/sortie de l'algorithme CatBoost

Le boosting de gradient fonctionne sur les données tabulaires, avec les lignes représentant les observations, une colonne représentant la variable ou l'étiquette cible, et les autres colonnes représentant les fonctions.

L'implémentation SageMaker de CatBoost prend en charge le format CSV pour l'entraînement et l'inférence :

  • Pour Training ContentType (Type de contenu d'entraînement), les entrées valides doivent être au format texte/csv.

  • Pour Inference ContentType (Type de contenu d'inférence), les entrées valides doivent être au format texte/csv.

Note

Pour l'entraînement CSV, l'algorithme suppose que la variable cible est dans la première colonne et que le CSV n'a pas d'enregistrement d'en-tête.

Pour l'inférence CSV, l'algorithme suppose que l'entrée CSV ne dispose pas de la colonne d'étiquette.

Soyez conscient de la façon de formater vos données d'entraînement pour les entrer dans le modèle CatBoost. Vous devez fournir le chemin d'accès à un compartiment Amazon S3 contenant des sous-répertoires pour vos données d'entraînement et de validation facultative. Vous pouvez également inclure une liste de caractéristiques catégorielles.

  • Format d'entrée des données d'entraînement : vos données d'entraînement doivent être dans un sous-répertoire nommé train/, contenant un fichier data.csv. Les variables cibles doivent figurer dans la première colonne de data.csv. Les variables prédictives (caractéristiques) doivent figurer dans les autres colonnes.

  • Format d'entrée des données de validation : si vous le souhaitez, vous pouvez inclure un autre répertoire nommé validation/, contenant également un fichier data.csv. Les données de validation sont utilisées pour calculer un score de validation à la fin de chaque itération de renforcement. Un arrêt précoce intervient lorsque le score de validation cesse de s'améliorer. Si les données de validation ne sont pas fournies, 20 % de vos données d'entraînement sont échantillonnées de façon aléatoire pour servir de données de validation.

  • Format d'entrée des caractéristiques catégorielles : si vos prédicteurs incluent des caractéristiques catégorielles, vous pouvez fournir un fichier JSON nommé categorical_index.json au même emplacement que vos répertoires de données. Ce fichier doit contenir un dictionnaire Python dans lequel la clé est la chaîne "cat_index_list" et la valeur est une liste d'entiers uniques. Chaque entier de la liste de valeurs doit indiquer l'indice de colonne des caractéristiques catégorielles correspondantes dans votre fichier CSV de données d'entraînement. Chaque valeur doit être un entier positif (supérieur à zéro car zéro représente la valeur cible), inférieur à Int32.MaxValue (2147483647) et inférieur au nombre total de colonnes. Il ne doit y avoir qu'un seul fichier JSON d'indices catégoriels.

Pour le mode d'entrée de l'entraînement CSV, la mémoire totale disponible pour l'algorithme (nombre d'instances multiplié par la mémoire disponible dans InstanceType) doit pouvoir contenir le jeu de données d'entraînement.

Dans SageMaker, CatBoost utilise les modules catboost.CatBoostClassifier et catboost.CatBoostRegressor pour sérialiser et désérialiser le modèle, qui peuvent être utilisés pour l'enregistrement et le chargement du modèle.

Pour utiliser un modèle entraîné avec SageMaker CatBoost avec catboost
  • Utilisez le code Python suivant :

    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)

Recommandation d'instances Amazon EC2 pour l'algorithme CatBoost

CatBoost dans SageMaker effectue actuellement l'entraînement uniquement à l'aide des UC. CatBoost est un algorithme dépendant de la mémoire (par opposition à un algorithme dépendant du calcul). Par conséquent, une instance de calcul à usage général (par exemple, M5) constitue un meilleur choix qu'une instance optimisée pour le calcul (par exemple, C5). De plus, nous vous recommandons d'avoir suffisamment de mémoire totale dans les instances sélectionnées pour contenir les données d'entraînement.

Exemples de blocs-notes CatBoost

Le tableau suivant présente divers exemples de blocs-notes traitant de différents cas d'utilisation de l'algorithme CatBoost dans Amazon SageMaker.

Titre du bloc-notes Description

Classification tabulaire avec l'algorithme LightGBM ou CatBoost dans Amazon SageMaker (Français non garanti)

Ce bloc-notes illustre l'utilisation de l'algorithme CatBoost dans Amazon SageMaker pour entraîner et héberger un modèle de classification tabulaire.

Régression tabulaire avec l'algorithme LightGBM ou CatBoost dans Amazon SageMaker (Français non garanti)

Ce bloc-notes illustre l'utilisation de l'algorithme CatBoost dans Amazon SageMaker pour entraîner et héberger un modèle de régression tabulaire.

Pour obtenir des instructions sur la création et l'accès aux instances de bloc-notes Jupyter que vous pouvez utiliser pour exécuter l'exemple dans SageMaker, consultez Utilisation des instances de bloc-notes Amazon SageMaker. Après avoir créé et ouvert une instance de bloc-notes, choisissez l'onglet SageMaker Examples (Exemples SageMaker) pour afficher la liste de tous les exemples SageMaker. Pour ouvrir un bloc-notes, choisissez son onglet Use (Utiliser), puis Create copy (Créer une copie).