Instruction CREATE MODEL pour les modèles en arbre de décision à boosting utilisant XGBoost

Instruction CREATE MODEL pour les modèles en arbre de décision à boosting utilisant XGBoost

Pour créer un modèle en arbre de décision à boosting dans BigQuery, utilisez l'instruction BigQuery ML CREATE MODEL avec les types de modèle BOOSTED_TREE_CLASSIFIER ou BOOSTED_TREE_REGRESSOR. Le modèle est entraîné à l'aide de la bibliothèque XGBoost.

Syntaxe de CREATE MODEL

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL} model_name
[OPTIONS(MODEL_TYPE = { 'BOOSTED_TREE_CLASSIFIER' | 'BOOSTED_TREE_REGRESSOR' },
         BOOSTER_TYPE = {'GBTREE' | 'DART'},
         NUM_PARALLEL_TREE = int64_value,
         DART_NORMALIZE_TYPE = {'TREE' | 'FOREST'},
         TREE_METHOD = {'AUTO' | 'EXACT' | 'APPROX' | 'HIST'},
         MIN_TREE_CHILD_WEIGHT = int64_value,
         COLSAMPLE_BYTREE = float64_value,
         COLSAMPLE_BYLEVEL = float64_value,
         COLSAMPLE_BYNODE = float64_value,
         MIN_SPLIT_LOSS = float64_value,
         MAX_TREE_DEPTH = int64_value,
         SUBSAMPLE = float64_value,
         AUTO_CLASS_WEIGHTS = { TRUE | FALSE },
         CLASS_WEIGHTS = struct_array,
         L1_REG = float64_value,
         L2_REG = float64_value,
         EARLY_STOP = { TRUE | FALSE },
         LEARN_RATE = float64_value,
         INPUT_LABEL_COLS = string_array,
         MAX_ITERATIONS = int64_value,
         MIN_REL_PROGRESS = float64_value,
         DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' },
         DATA_SPLIT_EVAL_FRACTION = float64_value,
         DATA_SPLIT_COL = string_value
)];

CREATE MODEL

Crée un modèle BigQuery ML dans l'ensemble de données spécifié. Si le nom du modèle existe, CREATE MODEL renvoie une erreur.

CREATE MODEL IF NOT EXISTS

Ne crée un modèle BigQuery ML que si ce modèle n'existe pas dans l'ensemble de données spécifié.

CREATE OR REPLACE MODEL

Crée un modèle BigQuery ML et remplace tout modèle existant du même nom dans l'ensemble de données spécifié.

model_name

model_name correspond au nom du modèle BigQuery ML que vous créez ou remplacez. Le nom du modèle doit être unique pour chaque ensemble de données. Aucun autre modèle, ni table ne peut porter le même nom. Le nom du modèle doit respecter les mêmes règles de dénomination que celles des tables BigQuery. Un nom de modèle peut contenir les éléments suivants :

  • Jusqu'à 1 024 caractères
  • Des lettres majuscules ou minuscules, des chiffres et des traits de soulignement

model_name n'est pas sensible à la casse.

Si aucun projet par défaut n'est configuré, ajoutez l'ID du projet au début du nom du modèle au format suivant, en intégrant les accents graves :

`[PROJECT_ID].[DATASET].[MODEL]`

Exemple :

`myproject.mydataset.mymodel`

CREATE MODEL pour les modèles en arbre de décision à boosting accepte les options suivantes :

MODEL_TYPE

Syntaxe

MODEL_TYPE = { 'BOOSTED_TREE_CLASSIFIER' | 'BOOSTED_TREE_REGRESSOR' }

Description

Spécifie le type de modèle. Cette option est obligatoire.

AUTO_CLASS_WEIGHTS

Syntaxe

AUTO_CLASS_WEIGHTS = { TRUE | FALSE }

Description

Indique si les étiquettes de classe doivent être équilibrées à l'aide de pondérations pour chaque classe de manière inversement proportionnelle à la fréquence de cette classe.

À n'utiliser qu'avec le modèle BOOSTED_TREE_CLASSIFIER.

Par défaut, les données d'entraînement utilisées pour créer un modèle de classificateur d'arbre de décision à boosting ne sont pas pondérées. Si les étiquettes des données d'entraînement sont déséquilibrées, le modèle peut apprendre à prédire en priorité la classe d'étiquettes la plus populaire, ce qui peut être indésirable.

Pour équilibrer chaque classe, utilisez la formule suivante :

total_input_rows / (input_rows_for_class_n * number_of_unique_classes)

Arguments

Accepte une valeur booléenne (BOOL). La valeur par défaut est FALSE.

CLASS_WEIGHTS

Syntaxe

CLASS_WEIGHTS = struct_array

Description

Les pondérations à utiliser pour chaque étiquette de classe. Cette option ne peut pas être spécifiée si la valeur de AUTO_CLASS_WEIGHTS est TRUE.

Arguments

struct_array est une table (ARRAY) de structures (STRUCT) ; chaque STRUCT comprend une chaîne (STRING) contenant l'étiquette de classe et un FLOAT64 contenant la pondération de cette étiquette de classe. Une pondération doit figurer pour chaque étiquette de classe. La somme des pondérations n'a pas besoin d'être égale à 1. Exemple :

CLASS_WEIGHTS = [STRUCT('example_label', .2)]

EARLY_STOP

Syntaxe

EARLY_STOP = { TRUE | FALSE }

Description

Indique si l'entraînement doit s'arrêter après la première itération pour laquelle l'amélioration de la perte relative est inférieure à la valeur spécifiée pour MIN_REL_PROGRESS.

Arguments

Il s'agit d'une valeur booléenne (BOOL). La valeur par défaut est TRUE.

INPUT_LABEL_COLS

Syntaxe

INPUT_LABEL_COLS = string_array

Description

Le(s) nom(s) de la colonne d'étiquette dans les données d'entraînement.

Arguments

string_array est une table (ARRAY) de chaînes (STRING). Les types de modèles en arbre de décision à boosting n'acceptent que les valeurs string_array contenant un seul élément.

L1_REG

Syntaxe

L1_REG = float64_value

Description

La quantité de régularisation L1 appliquée.

Arguments

L'élément float64_value appartient au groupe FLOAT64. La valeur par défaut est 0.

L2_REG

Syntaxe

L2_REG = float64_value

Description

La quantité de régularisation L2 appliquée.

Arguments

L'élément float64_value appartient au groupe FLOAT64. La valeur par défaut est 1.0.

LEARN_RATE

Syntaxe

LEARN_RATE = float64_value

Description

"Learn_rate" correspond à la réduction de la taille de pas utilisée dans la mise à jour pour éviter le surapprentissage. Après chaque étape de boosting, "learn_rate" réduit la pondération des caractéristiques afin que le processus d'optimisation soit plus conservateur.

Arguments

L'élément float64_value appartient au groupe FLOAT64. La valeur par défaut est 0.3.

MAX_ITERATIONS

Syntaxe

MAX_ITERATIONS = int64_value

Description

Nombre maximal de tours du boosting.

Arguments

L'élément int64_value appartient au groupe INT64. La valeur par défaut est 20.

MIN_REL_PROGRESS

Syntaxe

MIN_REL_PROGRESS = float64_value

Description

Valeur minimale de l'amélioration de la perte relative nécessaire pour poursuivre l'entraînement lorsque EARLY_STOP est défini sur true. Par exemple, une valeur de 0,01 spécifie que chaque itération doit réduire la perte de 1 % pour que l'entraînement persiste.

Arguments

L'élément float64_value appartient au groupe FLOAT64. La valeur par défaut est 0,01.

BOOSTER_TYPE

Syntaxe

BOOSTER_TYPE =  { 'GBTREE' | 'DART'}

Description

Pour les modèles en arbre de décision à boosting, spécifiez le type de booster à utiliser, avec la valeur par défaut gbtree.

Arguments

Les options suivantes sont disponibles :

NUM_PARALLEL_TREE

Syntaxe

NUM_PARALLEL_TREE = int64_value

Description

Nombre d'arbres parallèles créés à chaque itération. La valeur par défaut est 1. Pour entraîner une forêt d'arbres décisionnels à boosting, définissez cette valeur sur un nombre supérieur à 1.

DART_NORMALIZE_TYPE

Syntaxe

DART_NORMALIZE_TYPE = { 'TREE' | 'FOREST'}

Description

Type d'algorithme de normalisation pour booster DART. La valeur par défaut est tree.

TREE_METHOD

Syntaxe

TREE_METHOD = { 'AUTO' | 'EXACT' | 'APPROX' | 'HIST'}

Description

Type d'algorithme de création d'arbre. La valeur par défaut est AUTO.

HIST est recommandé pour les ensembles de données volumineux afin d'accélérer l'entraînement et de réduire la consommation de ressources. Pour en savoir plus, consultez la section booster arbre.

MIN_TREE_CHILD_WEIGHT

Syntaxe

MIN_TREE_CHILD_WEIGHT = int64_value

Description

Somme minimale de poids d'instance nécessaire dans un enfant pour un partitionnement ultérieur. Si l'étape de partition d'arbre aboutit à un nœud feuille dont la somme de la pondération de l'instance est inférieure à min_tree_child_weight, le processus de compilation abandonne tout partitionnement ultérieur. Plus la valeur de min_tree_child_weight est élevée, plus l'algorithme est conservateur. Sa valeur doit être supérieure ou égale à 0, la valeur par défaut étant 1.

COLSAMPLE_BYTREE

Syntaxe

COLSAMPLE_BYTREE = float64_value

Description

Taux de sous-échantillonnage des colonnes lors de la création de chaque arbre. Le sous-échantillonnage a lieu une fois pour chaque arbre créé. Sa valeur doit être comprise entre 0 et 1, la valeur par défaut étant 1.

COLSAMPLE_BYLEVEL

Syntaxe

COLSAMPLE_BYLEVEL = float64_value

Description

Taux de sous-échantillonnage des colonnes pour chaque niveau. Le sous-échantillonnage a lieu une fois pour chaque nouveau niveau de profondeur atteint dans un arbre. Les colonnes sont sous-échantillonnées à partir de l'ensemble de colonnes choisi pour l'arbre actuel. Sa valeur doit être comprise entre 0 et 1, la valeur par défaut étant 1.

COLSAMPLE_BYNODE

Syntaxe

COLSAMPLE_BYNODE = float64_value

Description

Taux de sous-échantillonnage des colonnes pour chaque nœud (division). Le sous-échantillonnage a lieu chaque fois qu'une nouvelle division est évaluée. Les colonnes sont sous-échantillonnées à partir de l'ensemble de colonnes choisi pour le niveau actuel. Sa valeur doit être comprise entre 0 et 1, la valeur par défaut étant 1.

MIN_SPLIT_LOSS

Syntaxe

MIN_SPLIT_LOSS = float64_value

Description

Valeur minimale de la réduction de perte requise pour créer une partition supplémentaire sur un nœud feuille de l'arbre. Plus la valeur de min_split_loss est élevée, plus l'algorithme est conservateur. La valeur par défaut est 0.

MAX_TREE_DEPTH

Syntaxe

MAX_TREE_DEPTH = int64_value

Description

Profondeur maximale d'un arbre. La valeur par défaut est 6.

SUBSAMPLE

Syntaxe

SUBSAMPLE = float64_value

Description

Taux de sous-échantillonnage des instances d'entraînement. Définir cette valeur sur 0,5 signifie que l'entraînement échantillonne de manière aléatoire la moitié des données d'entraînement avant la création des arbres, ce qui évite le surapprentissage. Le sous-échantillonnage a lieu une fois par itération de boosting. Cela est indépendant de la division des données de test et d'entraînement utilisée dans les options d'entraînement (80/20 aléatoire par défaut). Les données de test ne sont utilisées dans aucune itération, quel que soit le sous-échantillon. Celui-ci n'est appliqué qu'aux données d'entraînement. Sa valeur doit être comprise entre 0 et 1, la valeur par défaut étant 1.0 (utiliser toutes les données d'entraînement à chaque itération).

DATA_SPLIT_METHOD

Syntaxe

DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' }

Description

La méthode permettant de scinder les données d'entrée en ensembles d'entraînement et d'évaluation. Les données d'entraînement servent à entraîner le modèle. Les données d'évaluation permettent d'éviter le surapprentissage en raison d'un arrêt prématuré.

Arguments

Accepte les valeurs suivantes :

'AUTO_SPLIT' : la stratégie de répartition automatique est la suivante :

  • Lorsque les données d'entrée comprennent moins de 500 lignes, toutes les lignes sont utilisées en tant que données d'entraînement.
  • Lorsque les données d'entrée comprennent entre 500 et 50 000 lignes, 20 % de ces données sont utilisées en tant que données d'évaluation dans une répartition RANDOM.
  • Lorsque les données d'entrée comprennent plus de 50 000 lignes, seules 10 000 d'entre elles sont utilisées en tant que données d'évaluation dans une répartition RANDOM.

'RANDOM' répartit les données de manière aléatoire. La répartition aléatoire est déterministe ; plusieurs entraînements différents produisent les mêmes résultats de répartition si les données d'entraînement sous-jacentes restent identiques.

'CUSTOM' répartit les données à l'aide d'une colonne de type BOOL fournie par le client. Les lignes dont la valeur est définie sur TRUE sont utilisées en tant que données d'évaluation. Les lignes dont la valeur est définie sur FALSE sont utilisées en tant que données d'entraînement.

'SEQ' répartit les données de manière séquentielle à l'aide d'une colonne fournie par le client. La colonne peut posséder n'importe quel type de données pouvant être triées : NUMERIC, BIGNUMERIC, STRING ou TIMESTAMP. Toutes les lignes dont les valeurs fractionnées sont inférieures au seuil sont utilisées en tant que données d'entraînement. Les lignes restantes, y compris les valeurs NULL, sont utilisées en tant que données d'évaluation.

'NO_SPLIT' utilise toutes les données en tant que données d'entraînement.

DATA_SPLIT_EVAL_FRACTION

Syntaxe

DATA_SPLIT_EVAL_FRACTION = float64_value

Description

Cette option est utilisée avec les répartitions 'RANDOM' et 'SEQ'. Elle spécifie la fraction des données utiles à l'évaluation, à deux décimales près.

Arguments

L'élément float64_value appartient au groupe FLOAT64. La valeur par défaut est 0.2.

DATA_SPLIT_COL

Syntaxe

DATA_SPLIT_COL = string_value

Description

Identifie la colonne permettant de répartir les données. Cette colonne ne peut pas être utilisée comme caractéristique, ni comme étiquette. Elle sera automatiquement exclue des caractéristiques.

  • Lorsque la valeur de DATA_SPLIT_METHOD est définie sur 'CUSTOM', la colonne correspondante doit être de type BOOL. Les lignes dont les valeurs sont définies sur TRUE ou NULL sont utilisées en tant que données d'évaluation. Les lignes dont les valeurs sont définies sur FALSE sont utilisées en tant que données d'entraînement.

  • Lorsque la valeur de DATA_SPLIT_METHOD est définie sur 'SEQ', les n dernières lignes par ordre de grandeur croissant dans la colonne correspondante sont utilisées en tant que données d'évaluation, où n correspond à la valeur spécifiée pour DATA_SPLIT_EVAL_FRACTION. Les premières lignes sont utilisées en tant que données d'entraînement.

Exemple

L'exemple suivant entraîne un modèle de classificateur d'arbre de décision à boosting sur 'mytable' avec 'mylabel' comme colonne d'étiquette.

CREATE MODEL project_id:mydataset.mymodel
OPTIONS(MODEL_TYPE='BOOSTED_TREE_CLASSIFIER',
        BOOSTER_TYPE = 'GBTREE',
        NUM_PARALLEL_TREE = 1,
        MAX_ITERATIONS = 50,
        TREE_METHOD = 'HIST',
        EARLY_STOP = FALSE,
        SUBSAMPLE = 0.85,
        INPUT_LABEL_COLS = ['mylabel'])
AS SELECT * FROM project_id:mydataset.mytable;

Régions où le service est disponible

L'entraînement des modèles en arbre de décision à boosting n'est pas accepté dans certaines régions BigQuery ML. Pour obtenir la liste complète des régions et zones multirégionales acceptées, consultez la section Emplacements régionaux.