Instrução CREATE MODEL para modelos Boosted Tree usando XGBoost

Instrução CREATE MODEL para modelos Boosted Tree usando o XGBoost

Para criar um modelo de árvore otimizada no BigQuery, use a instrução CREATE MODEL do BigQuery ML com os tipos de modelo BOOSTED_TREE_CLASSIFIER ou BOOSTED_TREE_REGRESSOR. O modelo é treinado usando a biblioteca XGBoost.

Sintaxe 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

Cria um novo modelo do BigQuery ML no conjunto de dados especificado. Se o nome do modelo já estiver em uso, CREATE MODEL retornará um erro.

CREATE MODEL IF NOT EXISTS

Criará um novo modelo do BigQuery ML somente se não houver um outro modelo de mesmo nome no conjunto de dados especificado.

CREATE OR REPLACE MODEL

Cria um novo modelo do BigQuery ML e substitui qualquer modelo que já existe com o mesmo nome no conjunto de dados especificado.

model_name

model_name é o nome do modelo do BigQuery ML que você está criando ou substituindo. O nome do modelo precisa ser exclusivo por conjunto de dados: nenhum outro modelo ou tabela pode ter o mesmo nome. O nome do modelo precisa seguir as mesmas regras de nomenclatura de uma tabela do BigQuery. Um nome de modelo pode conter:

  • até 1.024 caracteres
  • letras maiúsculas, minúsculas, números e sublinhados

model_name não diferencia maiúsculas de minúsculas.

Se você não tiver um projeto padrão configurado, insira o nome do modelo com o ID do projeto no seguinte formato, incluindo os acentos graves:

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

Por exemplo:

`myproject.mydataset.mymodel`

CREATE MODEL para modelos de árvore otimizada é compatível com as seguintes opções:

MODEL_TYPE

Sintaxe

MODEL_TYPE = { 'BOOSTED_TREE_CLASSIFIER' | 'BOOSTED_TREE_REGRESSOR' }

Descrição

Especifica o tipo do modelo. Esta opção é obrigatória.

AUTO_CLASS_WEIGHTS

Sintaxe

AUTO_CLASS_WEIGHTS = { TRUE | FALSE }

Descrição

Define se os rótulos de classe serão balanceados usando pesos para cada classe em proporção inversa à frequência dessa classe.

Use somente com o modelo BOOSTED_TREE_CLASSIFIER.

Por padrão, os dados de treinamento usados para criar um modelo do classificador de árvore otimizada não são ponderados. Se os rótulos nos dados de treinamento estiverem desequilibrados, o modelo poderá aprender a prever a classe mais comum de rótulos com mais intensidade, o que talvez não seja o ideal.

Para balancear todas as classes, use a seguinte fórmula:

total_input_rows / (input_rows_for_class_n * number_of_unique_classes)

Argumentos

Aceita um BOOL. O valor padrão é FALSE.

CLASS_WEIGHTS

Sintaxe

CLASS_WEIGHTS = struct_array

Descrição

Os pesos a serem usados para cada rótulo de classe. Essa opção não poderá ser especificada quando AUTO_CLASS_WEIGHTS for TRUE.

Argumentos

struct_array é um ARRAY de códigos STRUCT. Desse modo, cada STRUCT contém um STRING que contém o rótulo de classe e um FLOAT64 que contém o peso desse rótulo de classe. É preciso que haja um peso para cada rótulo de classe. Não é necessário que os pesos somem um. Por exemplo:

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

EARLY_STOP

Sintaxe

EARLY_STOP = { TRUE | FALSE }

Descrição

Indica se o treinamento precisa parar após a primeira iteração em que a melhoria da perda relativa é menor que o valor especificado para MIN_REL_PROGRESS.

Argumentos

O valor é um BOOL. O valor padrão é TRUE.

INPUT_LABEL_COLS

Sintaxe

INPUT_LABEL_COLS = string_array

Descrição

Nome(s) de coluna de rótulo nos dados de treinamento.

Argumentos

string_array é um ARRAY de STRINGs. Os tipos de modelo de árvore otimizada são compatíveis somente com valores string_array que contêm um elemento.

L1_REG

Sintaxe

L1_REG = float64_value

Descrição

Quantidade de regularização L1 (em inglês) aplicada.

Argumentos

float64_value é um FLOAT64. O valor padrão é 0.

L2_REG

Sintaxe

L2_REG = float64_value

Descrição

Quantidade de regularização L2 (em inglês) aplicada.

Argumentos

float64_value é um FLOAT64. O valor padrão é 1,0.

LEARN_RATE

Sintaxe

LEARN_RATE = float64_value

Descrição

Learn_rate é a redução do tamanho da etapa usada na atualização para evitar o overfitting. Após cada etapa de otimização, learn_rate reduz os pesos dos recursos para tornar o processo de otimização mais conservador.

Argumentos

float64_value é um FLOAT64. O valor padrão é 0,3.

MAX_ITERATIONS

Sintaxe

MAX_ITERATIONS = int64_value

Descrição

O número máximo de rodadas para otimização.

Argumentos

int64_value é um INT64. O valor padrão é 20.

MIN_REL_PROGRESS

Sintaxe

MIN_REL_PROGRESS = float64_value

Descrição

Melhoria mínima de perda relativa, necessária para continuar o treinamento quando EARLY_STOP for definido como true. Por exemplo, o valor 0,01 especifica que cada iteração precisa reduzir a perda em 1% para que o treinamento continue.

Argumentos

float64_value é um FLOAT64. O valor padrão é 0,01.

BOOSTER_TYPE

Sintaxe

BOOSTER_TYPE =  { 'GBTREE' | 'DART'}

Descrição

Em modelos de árvore otimizada, especifique o tipo de otimizador a ser usado, com o valor padrão gbtree.

Argumentos

As seguintes opções estão disponíveis:

NUM_PARALLEL_TREE

Sintaxe

NUM_PARALLEL_TREE = int64_value

Descrição

Número de árvores paralelas construídas em cada iteração. O valor padrão é 1. Para treinar uma floresta aleatória otimizada, defina esse valor como maior que 1.

DART_NORMALIZE_TYPE

Sintaxe

DART_NORMALIZE_TYPE = { 'TREE' | 'FOREST'}

Descrição

Tipo de algoritmo de normalização para otimizador do DART. O valor padrão é tree.

TREE_METHOD

Sintaxe

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

Descrição

Tipo de algoritmo de construção em árvore. O valor padrão é AUTO.

HIST é recomendado para conjuntos de dados grandes para garantir uma velocidade de treinamento mais rápida e menor consumo de recursos. Para mais informações, consulte o aumento de árvore.

MIN_TREE_CHILD_WEIGHT

Sintaxe

MIN_TREE_CHILD_WEIGHT = int64_value

Descrição

Peso mínimo da instância necessário em uma árvore filha para particionamento adicional. Se a etapa da partição da árvore resultar em um nó de folha com a soma do peso da instância menor que min_tree_child_weight, o processo de compilação abrirá mão do particionamento adicional. Quanto maior for o min_tree_child_weight, mais conservador será o algoritmo. O valor deve ser maior ou igual a 0, com valor padrão 1.

COLSAMPLE_BYTREE

Sintaxe

COLSAMPLE_BYTREE = float64_value

Descrição

Proporção de subamostra de colunas ao construir cada árvore. A subamostragem ocorre uma vez para cada árvore construída. O valor deve estar entre 0 e 1, com valor padrão 1.

COLSAMPLE_BYLEVEL

Sintaxe

COLSAMPLE_BYLEVEL = float64_value

Descrição

Proporção de subamostra de colunas para cada nível. A subamostragem ocorre uma vez para cada novo nível de profundidade alcançado em uma árvore. O conjunto de colunas escolhido para a árvore atual gera a subamostragem das colunas. O valor deve estar entre 0 e 1, com valor padrão 1.

COLSAMPLE_BYNODE

Sintaxe

COLSAMPLE_BYNODE = float64_value

Descrição

Proporção de subamostra de colunas para cada nó (divisão). A subamostragem ocorre toda vez que uma nova divisão é avaliada. O conjunto de colunas escolhido para o nível atual gera a subamostragem das colunas. O valor deve estar entre 0 e 1, com valor padrão 1.

MIN_SPLIT_LOSS

Sintaxe

MIN_SPLIT_LOSS = float64_value

Descrição

Redução mínima de perda necessária para criar uma partição adicional em um nó de folha da árvore. Quanto maior for o min_split_loss, mais conservador será o algoritmo. O valor padrão é 0.

MAX_TREE_DEPTH

Sintaxe

MAX_TREE_DEPTH = int64_value

Descrição

Profundidade máxima de uma árvore. O valor padrão é 6.

SUBSAMPLE

Sintaxe

SUBSAMPLE = float64_value

Descrição

Proporção de subamostra das instâncias de treinamento. Definir esse valor como 0,5 significa treinar metade dos dados de treinamento com amostras em ordem aleatória. Isso acontece antes de se expandir as árvores, o que previne overfitting. A subamostragem ocorrerá uma vez a cada iteração de otimização. Isso não depende da divisão de dados de teste do treinamento nas opções de treinamento (aleatoriedade de 80/20 por padrão). Os dados de teste não são usados em iterações que possam não estar relacionadas à subamostra, pois ela só é aplicada aos dados de treinamento. O valor deve estar entre 0 e 1, com valor padrão 1,0 (usar todos os dados de treinamento em cada iteração).

DATA_SPLIT_METHOD

Sintaxe

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

Descrição

Método para dividir dados de entrada em conjuntos de treinamento e avaliação. Dados de treinamento são usados para treinar o modelo. Os dados de avaliação são usados para evitar o overfitting devido à parada antecipada.

Argumentos

Aceita os seguintes valores:

'AUTO_SPLIT' A estratégia de divisão automática é a seguinte:

  • Quando há menos de 500 linhas nos dados de entrada, todas as linhas são usadas como dados de treinamento.
  • Quando há entre 500 e 50.000 linhas nos dados de entrada, 20% dos dados são usados como dados de avaliação em uma divisão RANDOM.
  • Quando há mais de 50.000 linhas nos dados de entrada, somente 10.000 linhas são usadas como dados de avaliação em uma divisão RANDOM.

'RANDOM' Divide dados aleatoriamente. Uma divisão aleatória é determinística: diferentes execuções de treinamento produzirão os mesmos resultados de divisão se os dados de treinamento subjacentes permanecerem os mesmos.

'CUSTOM' Divide os dados sequencialmente usando uma coluna fornecida pelo cliente do tipo BOOL. As linhas com o valor TRUE são usadas como dados de avaliação. As linhas com o valor FALSE são usadas como dados de treinamento.

'SEQ' Divide os dados sequencialmente usando uma coluna fornecida pelo cliente. A coluna pode ter qualquer tipo de dados solicitados: NUMERIC, BIGNUMERIC, STRING ou TIMESTAMP Todas as linhas com valores divididos menores que o limite serão usadas como dados de treinamento. As linhas restantes, inclusive NULL, serão usadas como dados de avaliação.

'NO_SPLIT' usa todos os dados como dados de treinamento.

DATA_SPLIT_EVAL_FRACTION

Sintaxe

DATA_SPLIT_EVAL_FRACTION = float64_value

Descrição

Essa opção é usada com divisões 'RANDOM' e 'SEQ'. Ela especifica a fração dos dados usados para avaliação, com precisão de duas casas decimais.

Argumentos

float64_value é um FLOAT64. O valor padrão é 0.2.

DATA_SPLIT_COL

Sintaxe

DATA_SPLIT_COL = string_value

Descrição

Identifica a coluna usada para dividir os dados. Ela não pode ser usada como um recurso ou rótulo e será excluída dos recursos automaticamente.

  • Quando o valor de DATA_SPLIT_METHOD for 'CUSTOM', a coluna correspondente deverá ser do tipo BOOL. As linhas com valores TRUE ou NULL são usadas como dados de avaliação. Linhas com valores FALSE são usadas como dados de treinamento.

  • Quando o valor de DATA_SPLIT_METHOD for 'SEQ', as últimas n linhas, da menor para a maior, na coluna correspondente serão usadas como dados de avaliação, em que n será o valor especificado para DATA_SPLIT_EVAL_FRACTION. As primeiras linhas são usadas como dados de treinamento.

Exemplo

O exemplo a seguir treina um modelo de classificador de árvore otimizada em 'mytable' com 'mylabel' como a coluna de rótulo.

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;

Regiões compatíveis

O treinamento de modelos de árvore otimizada não é compatível com todas as regiões do BigQuery ML. Para ver uma lista completa de regiões e multirregiões compatíveis, consulte Locais regionais.