Entraînement à l'aide de l'algorithme intégré XGBoost

L'entraînement à l'aide des algorithmes intégrés d'AI Platform Training vous permet d'envoyer votre ensemble de données et d'entraîner un modèle sans avoir à écrire un code d'entraînement. Cette page explique le fonctionnement de l'algorithme intégré XGBoost, ainsi que son utilisation.

Présentation

L'algorithme intégré XGBoost est un wrapper pour XGBoost compatible avec AI Platform Training.

Ce document décrit une version de l'algorithme qui s'exécute sur une seule instance dupliquée de machine virtuelle. Il existe également une version distribuée de cet algorithme qui exploite plusieurs machines virtuelles pour l'entraînement et impose une utilisation légèrement différente. Cet algorithme comporte deux phases :

  1. Prétraitement : AI Platform Training transforme votre mélange de données catégorielles et numériques en ensemble de données entièrement numérique afin de le préparer à l'entraînement avec XGBoost.
  2. Entraînement : AI Platform Training exécute la tâche d'entraînement à l'aide de l'algorithme XGBoost à partir de votre ensemble de données et des paramètres de modèle que vous avez fournis. La mise en œuvre actuelle est basée sur la version 0.81 de XGBoost.

Limites

Les fonctionnalités suivantes ne sont pas compatibles avec l'entraînement effectué à l'aide de la version intégrée et à instance unique de l'algorithme XGBoost :

Types de machines compatibles

Voici les niveaux d'évolutivité et types de machines d'AI Platform Training qui sont compatibles :

Mettre en forme les données d'entrée

XGBoost fonctionne sur des données tabulaires numériques. Chaque ligne d'un ensemble de données représente une instance, et chaque colonne d'un ensemble de données représente une valeur de caractéristique. La colonne cible représente la valeur que vous souhaitez prédire.

Préparer un fichier CSV

Vos données d'entrée doivent être contenues dans un fichier CSV encodé en UTF-8. Si vos données d'entraînement ne contiennent que des valeurs catégorielles et numériques, vous pouvez utiliser notre module de prétraitement pour convertir les données catégorielles en données numériques. Vous pouvez aussi exécuter la tâche d'entraînement sans activer le prétraitement automatique.

Vous devez préparer votre fichier d'entrée CSV conformément aux conditions suivantes :

  • Supprimez la ligne d'en-tête. Cette ligne contient les libellés de chaque colonne. Supprimez-la afin d'éviter de l'envoyer avec le reste des instances de données en tant que données d'entraînement.
  • Assurez-vous que la colonne cible est placée en premier. La colonne cible contient la valeur que vous essayez de prédire. Pour un algorithme de classification, toutes les valeurs de la colonne cible représentent une classe ou une catégorie. Pour un algorithme de régression, toutes les valeurs de la colonne cible sont des valeurs numériques.

Gérer les valeurs des entiers

La signification des valeurs des entiers peut être ambiguë. Par conséquent, les colonnes comprenant ce type de valeurs sont problématiques pour le prétraitement automatique. AI Platform Training détermine automatiquement comment gérer les valeurs des entiers. Par défaut :

  • Si chaque valeur d'entier est unique, la colonne est considérée comme une liste de clés d'instance.
  • Si elle ne contient que quelques valeurs d'entiers uniques, la colonne est considérée comme catégorielle.
  • Sinon, les valeurs de la colonne sont converties en valeurs à virgule flottante et traitées comme des valeurs numériques.

Pour remplacer ces définitions par défaut :

  • Si les données doivent être traitées comme des données numériques, convertissez toutes les valeurs d'entiers de la colonne en valeurs à virgule flottante, comme dans l'exemple suivant : {101.0, 102.0, 103.0}.
  • Si les données doivent être traitées comme des données catégorielles, ajoutez un préfixe non numérique au préfixe toutes les valeurs d'entiers de la colonne, par exemple {code_101, code_102, code_103}

Normaliser les valeurs cibles pour la régression

Pour les tâches d'entraînement par régression, veillez à normaliser vos valeurs cibles de sorte que chaque valeur soit comprise entre 0 et 1.

Vérifier les autorisations du bucket Cloud Storage

Pour stocker vos données, utilisez un bucket Cloud Storage dans le projet Google Cloud que vous utilisez pour exécuter les tâches AI Platform Training. Sinon, accordez à AI Platform Training l'accès au bucket Cloud Storage où vos données sont stockées.

Envoyer une tâche d'entraînement XGBoost

Cette section explique comment envoyer une tâche d'entraînement utilisant l'algorithme intégré XGBoost.

Vous trouverez de brèves explications sur chaque hyperparamètre dans Google Cloud Console, ainsi qu'une explication plus complète dans la documentation de référence sur l'algorithme XGBoost intégré.

Console

  1. Accédez à la page "Tâches" d'AI Platform Training dans Google Cloud Console :

    Page "Tâches" d'AI Platform Training

  2. Cliquez sur le bouton Nouvelle tâche d'entraînement. Dans les options qui s'affichent en dessous, cliquez sur Entraînement de l'algorithme intégré.

  3. Sur la page Créer une tâche d'entraînement, sélectionnez XGBoost intégré, puis cliquez sur Suivant.

  4. Pour en savoir plus sur tous les paramètres disponibles, suivez les liens présents dans Google Cloud Console, et consultez la documentation de référence sur l'algorithme XGBoost intégré.

gcloud

  1. Définissez des variables d'environnement pour votre tâche, en remplaçant les éléments entre crochets ([VALUES-IN-BRACKETS]) par vos propres valeurs :

    # Specify the name of the Cloud Storage bucket where you want your
    # training outputs to be stored, and the Docker container for
    # your built-in algorithm selection.
    BUCKET_NAME='[YOUR-BUCKET-NAME]'
    IMAGE_URI='gcr.io/cloud-ml-algos/boosted_trees:latest'
    
    # Specify the Cloud Storage path to your training input data.
    TRAINING_DATA='gs://[YOUR_BUCKET_NAME]/[YOUR_FILE_NAME].csv'
    
    DATASET_NAME='census'
    ALGORITHM='xgboost'
    MODEL_TYPE='classification'
    
    DATE='date '+%Y%m%d_%H%M%S''
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${MODEL_NAME}/${DATE}"
    
  2. Envoyez la tâche d'entraînement à l'aide de gcloud ai-platform jobs training submit :

    gcloud ai-platform jobs submit training $JOB_ID \
       --master-image-uri=$IMAGE_URI --scale-tier=BASIC --job-dir=$JOB_DIR \
       -- \
       --preprocess --objective=binary:logistic \
       --training_data_path=$TRAINING_DATA
    
  3. Surveillez l'état de votre tâche d'entraînement en consultant les journaux avec gcloud. Reportez-vous aux commandes gcloud ai-platform jobs describe et gcloud ai-platform jobs stream-logs.

    gcloud ai-platform jobs describe ${JOB_ID}
    gcloud ai-platform jobs stream-logs ${JOB_ID}
    

Fonctionnement du prétraitement

Le prétraitement automatique fonctionne avec les données catégorielles et numériques. La routine de prétraitement commence par analyser les données, puis les transforme.

Analyse

Tout d'abord, AI Platform Training détecte automatiquement le type de données de chaque colonne, détermine comment traiter chaque colonne, puis effectue certains calculs statistiques sur les données de la colonne. Ces informations sont capturées dans le fichier metadata.json.

AI Platform Training analyse le type de la colonne cible pour déterminer si l'ensemble de données en question est destiné à la régression ou à la classification. Si cette analyse entre en conflit avec votre sélection de objective, une erreur est générée. Indiquez de façon explicite comment la colonne cible doit être traitée en formatant vos données de façon claire dans les cas ambigus.

  • Type : la colonne peut être numérique ou catégorielle.

  • Traitement : AI Platform Training détermine comment traiter chaque colonne de la manière suivante :

    • Si la colonne inclut une seule valeur dans toutes les lignes, elle est traitée comme une constante.
    • Si la colonne est catégorielle et inclut des valeurs uniques dans toutes les lignes, elle est traitée comme un identifiant de ligne.
    • Si la colonne est numérique avec des valeurs à virgule flottante ou entières et qu'elle contient de nombreuses valeurs uniques, elle est traitée comme numérique.
    • Si la colonne est numérique avec des valeurs d'entiers et qu'elle contient peu de valeurs uniques, elle est traitée comme une colonne catégorielle dans laquelle les valeurs d'entiers représentent l'identité ou le vocabulaire.
      • Une colonne est considérée comme ayant peu de valeurs uniques si le nombre de celles-ci dans la colonne est inférieur à 20 % du nombre de lignes dans l'ensemble de données d'entrée.
    • Si la colonne est catégorielle avec une cardinalité élevée, elle est traitée par hachage, le nombre de buckets de hachage étant égal à la racine carrée du nombre de valeurs uniques dans la colonne.
      • Une colonne catégorielle est considérée comme ayant une cardinalité élevée si le nombre de valeurs uniques est supérieur à la racine carrée du nombre de lignes dans l'ensemble de données.
    • Si la colonne est catégorielle et que le nombre de valeurs uniques est inférieur ou égal à la racine carrée du nombre de lignes dans l'ensemble de données, la colonne est traitée comme une colonne catégorielle normale avec un vocabulaire.
  • Statistiques : AI Platform Training calcule les statistiques suivantes en fonction du type de colonne et du traitement identifiés. Elles pourront être utilisées ultérieurement pour transformer la colonne.

    • Si la colonne est numérique, les valeurs de moyenne et de variance sont calculées.
    • Si la colonne est catégorielle et que le traitement est une identité ou un vocabulaire, les valeurs distinctes sont extraites de la colonne.
    • Si la colonne est catégorielle et que le traitement est un hachage, le nombre de buckets de hachage est calculé par rapport à la cardinalité de la colonne.

Transformation

Une fois l'analyse initiale de l'ensemble de données terminée, AI Platform Training transforme les données en fonction des types, traitements et statistiques qui sont appliqués à l'ensemble de données. AI Platform Training effectue les transformations dans l'ordre suivant :

  1. Divise l'ensemble de données d'entraînement en ensembles de données de validation et de test si vous spécifiez la quantité de données d'entraînement à utiliser dans chaque ensemble (exprimée en pourcentage).
  2. Supprime les lignes contenant plus de 10 % de valeurs manquantes.
  3. Remplit les valeurs manquantes. La moyenne est utilisée pour les colonnes numériques et les zéros sont utilisés pour les colonnes catégorielles. Consultez l'exemple ci-dessous.

  4. Pour chaque colonne catégorielle dont le traitement est un vocabulaire ou une identité, AI Platform Training effectue un encodage one-hot sur les valeurs de la colonne. Consultez l'exemple ci-dessous.

  5. Pour chaque colonne catégorielle dont le traitement est un hachage, AI Platform Training utilise FeatureHasher de scikit-learn pour hacher les caractéristiques. Le nombre de caractéristiques décomptées précédemment détermine le nombre de buckets de hachage.

  6. Chaque colonne désignée par un traitement par clé de ligne ou par constante est supprimée.

Exemples de transformations

Les lignes contenant 10 % de valeurs manquantes sont supprimées. Dans les exemples suivants, nous supposons que la ligne contient 10 valeurs. Chaque ligne d'exemple est tronquée pour des raisons de simplicité.

Ligne concernée Valeurs d'origine Valeurs transformées Explication
Exemple de ligne sans valeurs manquantes [3, 0,45, ...,
'fruits', 0, 1]
[3, 0,45, ...,
1, 0, 0, 0, 1]
La chaîne "fruits" est transformée en valeurs "1, 0, 0" dans l'encodage one-hot.
Trop de valeurs manquantes [3, 0,45, ...,
'fruits', __, __]
La ligne est supprimée. Plus de 10 % des valeurs de la ligne sont manquantes.
Valeur numérique manquante [3, 0,45, ...,
'fruits', 0, __]
[3, 0.45, ...,
1, 0, 0, 0, 0,54]
  • La valeur moyenne de la colonne remplace la valeur numérique manquante. Dans cet exemple, la moyenne est 0,54.
  • La chaîne "fruits" est transformée en valeurs "1, 0, 0" dans l'encodage one-hot.
Valeur catégorielle manquante [3, 0,45, ...,
__, 0, 1]
[3, 0,45, ...,
0, 0, 0, 0, 1]
  • La valeur catégorielle manquante est transformée en valeurs "0, 0, 0" dans l'encodage one-hot.

Une fois le prétraitement automatique terminé, AI Platform Training importe l'ensemble de données traité dans votre bucket Cloud Storage, dans le répertoire que vous avez spécifié dans la requête de la tâche.

Étape suivante