Instrução CREATE MODEL

Instrução CREATE MODEL

Para criar um modelo no BigQuery, use a instrução CREATE MODEL do BigQuery ML. Essa instrução é semelhante à instrução DDL CREATE TABLE. Quando você executa uma consulta SQL padrão que contém uma instrução CREATE MODEL, é gerado um job de consulta que processa a consulta.

Sintaxe CREATE MODEL

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL}
model_name
[TRANSFORM (select_list)]
[OPTIONS(model_option_list)]
[AS query_statement]

model_option_list:
  MODEL_TYPE = { 'LINEAR_REG' | 'LOGISTIC_REG' | 'KMEANS' | 'TENSORFLOW' | 'MATRIX_FACTORIZATION' }
  [, INPUT_LABEL_COLS = string_array ]
  [, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' | 'NORMAL_EQUATION' } ]
  [, L1_REG = float64_value ]
  [, L2_REG = float64_value ]
  [, MAX_ITERATIONS = int64_value ]
  [, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
  [, LEARN_RATE = float64_value ]
  [, EARLY_STOP = { TRUE | FALSE } ]
  [, 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 ]
  [, LS_INIT_LEARN_RATE = float64_value ]
  [, WARM_START = { TRUE | FALSE } ]
  [, AUTO_CLASS_WEIGHTS = { TRUE | FALSE } ]
  [, CLASS_WEIGHTS = struct_array ]
  [, NUM_CLUSTERS = int64_value ]
  [, KMEANS_INIT_METHOD = { 'RANDOM' | 'KMEANS++' | 'CUSTOM' } ]
  [, KMEANS_INIT_COL = string_value ]
  [, DISTANCE_TYPE = { 'EUCLIDEAN' | 'COSINE' } ]
  [, STANDARDIZE_FEATURES = { TRUE | FALSE } ]
  [, MODEL_PATH = string_value ]
  [, FEEDBACK_TYPE = {'EXPLICIT' | 'IMPLICIT'} ]
  [, NUM_FACTORS = int64_value ]
  [, USER_COL = string_value ]
  [, ITEM_COL = string_value ]
  [, RATING_COL = string_value ]
  [, WALS_ALPHA = float64_value ])

CREATE MODEL

Cria e treina um modelo novo no conjunto de dados especificado. Se o nome do modelo existir, CREATE MODEL retornará um erro.

CREATE MODEL IF NOT EXISTS

Cria e treina um modelo novo somente se o modelo não existir no conjunto de dados especificado.

CREATE OR REPLACE MODEL

Cria e treina um modelo e substitui um modelo atual com o mesmo nome no conjunto de dados especificado.

model_name

model_name é o nome do modelo 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;
  • conter letras (maiúsculas e 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, preceda 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`.

TRANSFORM

TRANSFORM permite especificar todo o pré-processamento durante a criação do modelo e aplicá-lo automaticamente durante a previsão e a avaliação.

Por exemplo, é possível criar o seguinte modelo:

CREATE OR REPLACE MODEL m
  TRANSFORM(ML.FEATURE_CROSS(STRUCT(f1, f2)) as cross_f,
            ML.QUANTILE_BUCKETIZE(f3) OVER() as buckets,
            label_col)
  OPTIONS(model_type=’linear_reg’, input_label_cols=['label_col'])
AS SELECT * FROM t

Durante a previsão, não é necessário pré-processar a entrada novamente, e as mesmas transformações são restauradas automaticamente:

SELECT * FROM ML.PREDICT(MODEL m, (SELECT f1, f2, f3 FROM table))

Quando a cláusula TRANSFORM está presente, apenas colunas de saída da cláusula TRANSFORM são usadas no treinamento. Todos os resultados de query_statement que não aparecem na cláusula TRANSFORM são ignorados.

As colunas de entrada da cláusula TRANSFORM são o resultado de query_statement. Assim, a entrada final usada no treinamento é o conjunto de colunas geradas pela seguinte consulta:

SELECT (select_list) FROM (query_statement);

As colunas de entrada da cláusula TRANSFORM podem ser do tipo SIMPLE ou ARRAY do tipo SIMPLE. Os tipos SIMPLE são tipos de dados não STRUCT e não ARRAY.

Na previsão (ML.PREDICT), os usuários só precisam passar as colunas originais de query_statement que são usadas dentro da cláusula TRANSFORM. As colunas descartadas em TRANSFORM não precisam ser fornecidas durante a previsão. TRANSFORM é aplicado automaticamente aos dados de entrada durante a previsão, inclusive as estatísticas usadas em funções analíticas de ML (por exemplo, ML.QUANTILE_BUCKETIZE).

select_list

É possível passar colunas de query_statement pelo treinamento de modelo sem transformação usando ** EXCEPT(), ou listando os nomes das colunas diretamente.

Nem todas as colunas de query_statement precisam aparecer na cláusula TRANSFORM, então é possível descartar colunas que aparecem em query_statement omitindo-as da cláusula TRANSFORM.

É possível transformar entradas de query_statement usando expressões em select_list. select_list é semelhante a uma instrução SELECT normal. select_list suporta a seguinte sintaxe:

  • *
  • * EXCEPT()
  • * REPLACE()
  • <var>expression</var>
  • <var>expression</var>.*

Em select_list, não pode constar o seguinte:

  • Funções de agregação.
  • Funções analíticas sem ML. É possível encontrar todas as funções de análise de ML em funções de pré-processamento
  • UDFs.
  • Subconsultas.
  • Colunas anônimas. Por exemplo, “a + b como c” é permitido, enquanto “a + b” não é.

As colunas de saída de select_list podem ser de qualquer tipo de dados compatível com o BigQuery ML.

Se presentes, as seguintes colunas precisam aparecer em select_list sem transformação:

  • label
  • data_split_col
  • kmeans_init_col

Se essas colunas forem retornadas por query_statement, será necessário referenciá-las em select_list pelo nome da coluna fora de qualquer expressão ou usando *. Não é permitido usar um alias com essas colunas.

model_option_list

Em model_option_list, a opção model_type é obrigatória. Todas as outras são opcionais.

CREATE MODEL é compatível com as seguintes opções:

MODEL_TYPE

Sintaxe

MODEL_TYPE = { 'LINEAR_REG' | 'LOGISTIC_REG' | 'KMEANS' }

Descrição

Especifique o tipo de modelo. Esta opção é obrigatória.

Argumentos

'LINEAR_REG' Regressão linear para previsão. Por exemplo, as vendas de um item em determinado dia. Os rótulos têm valores reais, não podem ser +/-, infinito ou NaN.

'LOGISTIC_REG' Regressão logística binária para classificação. Por exemplo, determinar se um cliente fará uma compra. Este modelo pode ser de dois tipos:

  • Regressão logística binária para classificação. Por exemplo, determinar se um cliente fará uma compra. Os rótulos têm apenas dois valores possíveis.
  • Regressão logística multiclasse para classificação. Esses modelos podem ser usados para prever diversos valores possíveis. Por exemplo, se uma entrada tem um valor "baixo", "médio" ou "alto". Os rótulos podem ter até 50 valores exclusivos. No BigQuery ML, o treinamento de regressão logística multiclasse usa um classificador multinomial (em inglês) com uma função de perda de entropia cruzada (em inglês).

'KMEANS' Cluster k-means para segmentação de dados. Por exemplo, identificar segmentos de clientes. K-means é uma técnica de aprendizado não supervisionada, portanto, o treinamento do modelo não requer rótulos ou dados de divisão para treinamento ou avaliação.

'TENSORFLOW' (beta) cria um modelo importando um modelo do TensorFlow para o BigQuery ML. Para mais informações, consulte Instrução CREATE MODEL para modelos do TensorFlow.

'MATRIX_FACTORIZATION' (Beta) Fatoração de matrizes para sistemas de recomendação. Por exemplo, com base em um determinado conjunto de usuários, itens e algumas preferências ou classificações para um subconjunto dos itens, é criado um modelo para prever a preferência de usuários por itens que eles não classificaram ou interagiram anteriormente. Para mais informações, consulte Instrução CREATE MODEL para modelos de fatoração de matrizes.

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 regressão linear e regressão logística são compatíveis somente com valores de string_array que contêm um elemento.

OPTIMIZE_STRATEGY

Sintaxe

OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' | 'NORMAL_EQUATION' }

Descrição

Estratégia para treinar modelos de regressão linear.

Argumentos

Aceita os seguintes valores:

'AUTO_STRATEGY' Determina a estratégia de treinamento da seguinte forma:

  • Se l1_reg ou warm_start estiver especificado, a estratégia batch_gradient_descent será usada.
  • Se o total de cardinalidades dos recursos de treinamento for superior a 10.000, a estratégia batch_gradient_descent será usada.
  • Se houver um problema de overfitting, ou seja, o número de exemplos de treinamento for menor que 10x, em que x é a cardinalidade total, a estratégia batch_gradient_descent será usada.
  • A estratégia NORMAL_EQUATION será usada para todos os outros casos.

'BATCH_GRADIENT_DESCENT' Treina o modelo usando o método do gradiente descendente em lote, que otimiza a função de perda usando a função gradiente.

'NORMAL_EQUATION' Calcula diretamente a solução menos quadrada (em inglês) do problema de regressão linear com a fórmula analítica. A equação normal não pode ser usada quando:

  • l1_reg é especificado.
  • warm_start é especificado.
  • a cardinalidade total dos recursos de treinamento é maior que 10.000.

O valor padrão é 'AUTO_STRATEGY'.

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 é 0.

MAX_ITERATIONS

Sintaxe

MAX_ITERATIONS = int64_value

Descrição

Número máximo de iterações de treinamento (ou etapas).

Argumentos

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

LEARN_RATE_STRATEGY

Sintaxe

LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' }

Descrição

Estratégia para especificar a taxa de aprendizado (em inglês) durante o treinamento.

Argumentos

'LINE_SEARCH' Usa o método pesquisa linear para calcular a taxa de aprendizado. A taxa de aprendizado inicial da pesquisa linear é o valor especificado para LS_INIT_LEARN_RATE.

A pesquisa linear desacelera o treinamento e aumenta o número de bytes processados, mas geralmente converge mesmo que a taxa de aprendizado inicial especificada seja maior.

'CONSTANT' Define a taxa de aprendizado com o valor especificado para LEARN_RATE.

O valor padrão é 'LINE_SEARCH'.

LEARN_RATE

Sintaxe

LEARN_RATE = float64_value

Descrição

A taxa de aprendizado do gradiente descendente quando LEARN_RATE_STRATEGY é definido como CONSTANT. Se LEARN_RATE_STRATEGY for definido como 'LINE_SEARCH', será retornado um erro.

Argumentos

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

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.

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.

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 (em inglês) por meio de 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 delas 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, STRING ou TIMESTAMP. Todas as linhas com valores divididos menores que o limite serão usadas como dados de treinamento. As linhas restantes, inclusive NULLs, serão usadas como dados de avaliação.

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

O valor padrão é 'AUTO_SPLIT' para modelos de regressão linear e de regressão logística.

O valor padrão é 'NO_SPLIT' para modelos de fatoração de matrizes. Se você decidir usar um método de divisão diferente, verifique se todos os usuários e itens têm linhas suficientes no conjunto de treinamento para criar um bom modelo.

Essa opção não é compatível com modelos do TensorFlow ou k-means.

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 é 'SEQ', as últimas n linhas, da menor para a maior na coluna correspondente, são usadas como dados de avaliação, em que n é o valor especificado para DATA_SPLIT_EVAL_FRACTION. As primeiras linhas são usadas como dados de treinamento.

Para informações sobre os tipos de entrada compatíveis, consulte Tipos de entrada compatíveis para DATA_SPLIT_COL.

Argumentos

string_value é uma STRING.

LS_INIT_LEARN_RATE

Sintaxe

LS_INIT_LEARN_RATE = float64_value

Descrição

Define a taxa de aprendizado inicial que LEARN_RATE_STRATEGY='LINE_SEARCH' usa. Esta opção só pode ser usada quando LINE_SEARCH é especificado.

Se o modelo LEARN_RATE parecer estar dobrando a cada iteração, conforme indicado por ML.TRAINING_INFO, tente definir LS_INIT_LEARN_RATE como a última taxa de aprendizado duplicada. A taxa de aprendizado inicial ideal é diferente para cada modelo. Uma taxa de aprendizado inicial pode ser boa para um modelo e não para outro.

Argumentos

float64_value é um FLOAT64.

WARM_START

Sintaxe

WARM_START = { TRUE | FALSE }

Descrição

Treine novamente um modelo com novos dados de treinamento, novas opções de modelo ou ambos. A menos que explicitamente modificadas, as opções iniciais usadas para treinar o modelo são usadas na execução a quente.

Em uma execução a quente, os números da iteração são redefinidos para iniciar do zero. O número TRAINING_RUN ou as colunas TIMESTAMP podem ser usados para distinguir a execução a quente da execução original.

O valor das opções MODEL_TYPE e LABELS e o esquema de dados de treinamento precisam permanecer constantes em uma inicialização a quente.

Argumentos

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

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 com regressões logísticas e logísticas multiclasse.

Por padrão, os dados de treinamento usados para criar um modelo de regressão logística multiclasse não são ponderados. Se os rótulos nos dados de treinamento estiverem desbalanceados, o modelo poderá aprender a prever a classe de rótulos mais conhecida de forma mais intensa, o que pode não ser desejado.

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. Esta opção não pode ser especificada quando AUTO_CLASS_WEIGHTS é especificado.

Argumentos

struct_array é um ARRAY de STRUCT. Cada STRUCT tem uma STRING contendo o rótulo da classe e um FLOAT64 com o peso desse rótulo. É preciso que haja um peso para cada rótulo de classe. Não é necessário que os pesos somem um. Exemplo:

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

NUM_CLUSTERS

Sintaxe

NUM_CLUSTERS = int64_value

Descrição

Para um modelo k-means, o número de clusters a serem identificados nos dados de entrada.

Argumentos

int64_value é um INT64. Os valores permitidos são de 2 a 100. O valor padrão é log10(n), em que n é o número de exemplos de treinamento.

KMEANS_INIT_METHOD

Sintaxe

KMEANS_INIT_METHOD = { 'RANDOM' | 'KMEANS++' | 'CUSTOM' }

Descrição

Para um modelo k-means, o método de inicialização dos clusters.

Para usar os mesmos centroides em consultas CREATE MODEL repetidas, especifique a opção 'CUSTOM'.

Argumentos

'RANDOM': inicializa os centroides selecionando aleatoriamente pontos de dados de NUM_CLUSTERS dos dados de entrada.

'KMEANS++': inicializa os centroides NUM_CLUSTERS usando o algoritmo KMEANS++. 'KMEANS++' treina um modelo melhor que a inicialização de cluster 'RANDOM'.

'CUSTOM': inicializa os centroides usando uma coluna fornecida do tipo BOOL. Essa coluna é especificada pela opção 'KMEANS_INIT_COL'. O BigQuery ML usa as linhas com um valor de TRUE como os centroides iniciais. Quando esta opção está presente e os valores em 'KMEANS_INIT_COL' são constantes, as consultas CREATE MODEL repetidas usam os mesmos centroides.

O valor padrão é 'RANDOM'

KMEANS_INIT_COL

Sintaxe

KMEANS_INIT_COL = string_value

Descrição

Para um modelo k-means, identifica a coluna usada para inicializar os centroides. Se essa coluna contiver um valor de TRUE para uma determinada linha, o BigQuery ML usará essa linha como um centroide inicial.

Essa opção só pode ser especificada quando 'KMEANS_INIT_METHOD' tem o valor 'CUSTOM'. A coluna correspondente precisa ser do tipo BOOL. A opção de modelo NUM_CLUSTERS precisa estar presente na consulta, e seu valor precisa ser igual ao número total de linhas TRUE nessa coluna. O BigQuery ML não pode usar essa coluna como um recurso e a exclui dos recursos automaticamente.

Argumentos

string_value é uma STRING.

DISTANCE_TYPE

Sintaxe

DISTANCE_TYPE = { 'EUCLIDEAN' | 'COSINE' }

Descrição

Para um modelo k-means, o tipo de métrica para calcular a distância entre dois pontos.

Argumentos

Aceita os seguintes valores:

'EUCLIDEAN' Usa a seguinte equação para calcular a distância entre os pontos x e y:

$$ \lVert x-y\rVert_{2} $$

'COSINE' usa a seguinte equação para calcular a distância:

$$ \sqrt{1-\frac{x \cdot y}{\lVert x\rVert_{2}\lVert y\rVert_{2}}} $$

em que \( \lVert x\rVert_{2} \) representa a norma L2 para x.

O valor padrão é 'EUCLIDEAN'.

STANDARDIZE_FEATURES

Sintaxe

STANDARDIZE_FEATURES = { TRUE | FALSE }

Descrição

Para um modelo kmeans, indica se é para padronizar recursos numéricos (em inglês).

Argumentos

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

MODEL_PATH

Sintaxe

MODEL_PATH = string_value

Descrição

Para tipos de modelo do TensorFlow, especifica o local do modelo do TensorFlow a ser importado.

string_value é o local de um bucket do Google Cloud Storage que contém o modelo a ser importado.

Consulte a instrução CREATE MODEL para modelos do TensorFlow para ver mais informações.

Exemplo

MODEL_PATH = 'gs:////bucket/path/to/saved_model/*'

FEEDBACK_TYPE

Sintaxe

FEEDBACK_TYPE = { 'EXPLICIT' | 'IMPLICIT' }

Descrição

Especifica o tipo de feedback para modelos de fatoração de matrizes, o que altera o algoritmo usado durante o treinamento.

Para saber mais, consulte as informações sobre modelos de fatoração de matrizes.

Argumentos

O valor padrão é 'EXPLICIT'.

NUM_FACTORS

Sintaxe

NUM_FACTORS = int64_value

Descrição

Especifica o número de fatores latentes a serem usados para modelos de fatoração de matrizes.

Argumentos

int64_value é um 'INT64'. Os valores permitidos são de 2 a 200. O valor padrão é log2(n), em que n é o número de exemplos de treinamento.

USER_COL

Sintaxe

USER_COL = string_value

Descrição

O nome da coluna de usuários para modelos de fatoração de matrizes.

Argumentos

string_value é uma 'STRING'. O valor padrão é 'user'.

ITEM_COL

Sintaxe

ITEM_COL = string_value

Descrição

O nome da coluna de itens para modelos de fatoração de matrizes.

Argumentos

string_value é uma 'STRING'. O valor padrão é 'item'.

RATING_COL

Sintaxe

RATING_COL = string_value

Descrição

O nome da coluna de classificações para modelos de fatoração de matrizes.

Argumentos

string_value é uma 'STRING'. O valor padrão é 'rating'.

WALS_ALPHA

Sintaxe

WALS_ALPHA = float64_value

Descrição

Um hiperparâmetro para o modelo de fatoração de matrizes 'IMPLICIT'. Para saber mais, consulte as informações sobre modelos de fatoração de matrizes.

Argumentos

float64_value é um 'FLOAT64'. O valor padrão é 40.

query_statement

A cláusula AS query_statement especifica a consulta do SQL padrão usada para gerar os dados de treinamento. Para saber qual a sintaxe SQL compatível com a cláusula query_statement, consulte a página Sintaxe de consulta do SQL padrão.

Todas as colunas referenciadas por query_statement são usadas como entradas para o modelo, exceto as colunas incluídas em input_label_cols e data_split_col.

Entradas compatíveis

A instrução CREATE MODEL é compatível com os seguintes tipos de dados para colunas de entrada de rótulo e de divisão de dados.

Tipos de dados aceitos para colunas de rótulo de entrada

O BigQuery ML é compatível com diferentes tipos de dados SQL padrão, dependendo do tipo de modelo. Os tipos de dados compatíveis com input_label_cols incluem:

Model type Supported label types
linear_reg INT64
NUMERIC
FLOAT64
logistic_reg Qualquer tipo de dados agrupável
kmeans Qualquer tipo de dados agrupável

Tipos de dados aceitos para colunas de divisão de dados

O BigQuery ML é compatível com diferentes tipos de dados SQL padrão, dependendo do método de divisão de dados. Os tipos de dados compatíveis com data_split_col incluem:

Data split method Supported column types
custom BOOL
seq INT64
NUMERIC
FLOAT64
TIMESTAMP

Limitações

Nas instruções CREATE MODEL, siga estas regras:

  • Apenas uma instrução CREATE é permitida.
  • Quando você usa uma instrução CREATE MODEL, o tamanho do modelo precisa ser 90 MB ou menos, senão a consulta falha. Geralmente, se todas as variáveis categóricas forem strings curtas, uma cardinalidade de recurso total (dimensão do modelo) de 5-10 milhões será aceita. A dimensionalidade é dependente da cardinalidade e do comprimento das variáveis de string.
  • A coluna de rótulo não pode conter valores NULL. Se a coluna de rótulos contiver valores NULL, a consulta falhará.
  • Atualmente, a cláusula CREATE MODEL IF NOT EXISTS sempre atualiza o último carimbo de data/hora modificado de um modelo.
  • Para modelos de regressão linear, a coluna label precisa ter valores reais (os valores de coluna não podem ser +/-, infinito ou NaN).
  • Para modelos de regressão logística, as colunas de rótulo podem conter até 50 valores exclusivos, ou seja, o número de classes é menor ou igual a 50.

Transformações de variáveis de entrada

O BigQuery ML transforma variáveis de entrada ou recursos da seguinte maneira:

Tipo de dados de entrada Método de transformação Detalhes
INT64
NUMERIC
FLOAT64
Padronização (em inglês) Para todas as colunas numéricas, o BigQuery ML padroniza e centraliza a coluna em zero antes de passá-la para treinamento. Ao criar um modelo k-means, a opção STANDARDIZE_FEATURES especifica se os recursos numéricos devem ser padronizados.
BOOL
STRING
BYTES
DATE
DATETIME
TIME
Codificação one-hot (em inglês) Para todas as colunas não numéricas não matriciais diferentes de TIMESTAMP, o BigQuery ML realiza uma transformação do tipo codificação one-hot. Essa transformação gera um recurso separado para cada valor exclusivo na coluna.
ARRAY Codificação multi-hot Para todas as colunas ARRAY não numéricas, o BigQuery ML executa uma transformação de codificação multi-hot. Essa transformação gera um recurso separado para cada elemento exclusivo na ARRAY.
TIMESTAMP Transformação de carimbo de data/hora Ao encontrar uma coluna TIMESTAMP, o BigQuery ML extrai um conjunto de componentes do TIMESTAMP e executa uma combinação de padronização e codificação one-hot nos componentes extraídos. Para o componente de tempo em segundos do Unix, o BigQuery ML usa padronização. Para todos os outros componentes, ele usa codificação one-hot.

É possível usar a função ML.WEIGHTS para ver a transformação de uma coluna TIMESTAMP em várias colunas de atributo.
STRUCT Expansão de struct Quando o BigQuery ML encontra uma coluna STRUCT, ele expande os campos dentro de STRUCT para colunas únicas. Exige que todos os campos sejam nomeados. STRUCT aninhado não é permitido. Os nomes das colunas após a expansão estão no formato de {struct_name}_{field_name}.

Imputação

Em estatística, a imputação é usada para substituir dados ausentes por valores substitutos. Quando você treina um modelo no BigQuery ML, os valores NULL são tratados como dados ausentes. Quando você prevê resultados no BigQuery ML, podem ocorrer valores ausentes quando o BigQuery ML encontra um valor NULL ou um valor não visto anteriormente. O BigQuery ML manipula dados ausentes com base no tipo da coluna: numérica, codificação one-hot ou carimbo de data/hora.

Colunas numéricas

No treinamento e na predição, os valores NULL em colunas numéricas são substituídos pelo valor médio, conforme calculado pela coluna de recurso nos dados de entrada originais.

Colunas de codificação one-hot/multi-hot

Seja no treinamento ou na predição, os valores NULL nas colunas de codificação são mapeados para uma categoria extra que é adicionada aos dados. Os dados não vistos anteriormente recebem peso 0 durante a predição.

Colunas de carimbo de data/hora

Colunas TIMESTAMP usam uma combinação de métodos de imputação de colunas padronizadas e de codificação one-hot. Para a coluna de tempo do unix gerada, o BigQuery ML substitui os valores pelo tempo médio do unix das colunas originais. Para os outros valores gerados, o BigQuery ML os atribui à respectiva categoria NULL de cada recurso extraído.

Colunas STRUCT

Tanto no treinamento quanto na previsão, cada campo de STRUCT é imputado de acordo com seu tipo.

Exemplos de CREATE MODEL

A instrução CREATE MODEL cria um modelo com as opções especificadas. Se o nome da tabela constar no conjunto de dados, será retornado o seguinte erro:

Already Exists: [PROJECT_ID]:[DATASET].[MODEL]

Para substituir um modelo existente, use a instrução CREATE OR REPLACE MODEL.

Os exemplos a seguir criam modelos denominados mymodel em mydataset em seu projeto padrão.

Como treinar um modelo de regressão linear

O exemplo a seguir cria e treina um modelo de regressão linear. A taxa de aprendizado é definida como 0,15, a regularização de L1 é definida como 1, e o número máximo de iterações de treinamento é definido como 5.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LINEAR_REG',
    LS_INIT_LEARN_RATE=.15,
    L1_REG=1,
    MAX_ITERATIONS=5 ) AS
SELECT
  column1,
  column2,
  column3,
  label
FROM
  `mydataset.mytable`
WHERE
  column4 < 10

Como treinar um modelo de regressão linear com uma divisão de dados sequencial

Neste exemplo, você cria um modelo de regressão linear com uma divisão de dados sequencial. A fração de divisão é .3, e a divisão usa a coluna timestamp como base para a divisão.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LINEAR_REG',
    LS_INIT_LEARN_RATE=.15,
    L1_REG=1,
    MAX_ITERATIONS=5,
    DATA_SPLIT_METHOD='SEQ',
    DATA_SPLIT_EVAL_FRACTION=0.3,
    DATA_SPLIT_COL='timestamp' ) AS
SELECT
  column1,
  column2,
  column3,
  timestamp,
  label
FROM
  `mydataset.mytable`
WHERE
  column4 < 10

Como treinar um modelo de regressão linear com uma divisão de dados personalizada

Neste exemplo, você dividiu seus dados manualmente em uma tabela de treinamento e em uma tabela de avaliação. A tabela de treinamento é denominada training_table. A tabela de avaliação é denominada evaluation_table.

Usando esse comando, você cria um modelo de regressão linear usando um método de divisão personalizada e treina o modelo unindo os dados das tabelas de avaliação e treinamento.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LINEAR_REG',
    DATA_SPLIT_METHOD='CUSTOM',
    DATA_SPLIT_COL='SPLIT_COL' ) AS
SELECT
  *,
  false AS split_col
FROM
  `mydataset.training_table`
UNION ALL
SELECT
  *,
  true AS split_col
FROM
  `mydataset.evaluation_table`

Neste exemplo, todas as colunas na tabela de treinamento e na tabela de avaliação são recursos ou o rótulo. A consulta usa SELECT * e UNION ALL para anexar todos os dados na coluna split_col aos dados existentes.

Como treinar um modelo de regressão logística multiclasse com pesos calculados automaticamente

Neste exemplo, você cria um modelo de regressão logística multiclasse usando a opção auto_class_weights.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LOGISTIC_REG',
    AUTO_CLASS_WEIGHTS=TRUE ) AS
SELECT
  *
FROM
  `mydataset.mytable`

Como treinar um modelo de regressão logística multiclasse com pesos especificados

Neste exemplo, você cria um modelo de regressão logística multiclasse usando a opção class_weights. As colunas de rótulo são label1, label2 e label3.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LOGISTIC_REG',
    CLASS_WEIGHTS=[('label1', 0.5), ('label2', 0.3), ('label3', 0.2)]) AS
SELECT
  *
FROM
  `mydataset.mytable`

Como treinar um modelo de regressão logística com pesos especificados

Neste exemplo, você cria um modelo de regressão logística usando a opção class_weights.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='LOGISTIC_REG',
    CLASS_WEIGHTS=[('0', 0.9), ('1', 0.1)]) AS
SELECT
  *
FROM
  `mydataset.mytable`

Como treinar um modelo k-means

Neste exemplo, criamos um modelo k-means com quatro clusters usando o valor distance_type padrão de euclidean_distance.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='KMEANS',
    NUM_CLUSTERS=4 ) AS
SELECT
  *
FROM `mydataset.mytable`

Como treinar um modelo k-means com clusters aleatórios

Neste exemplo, criamos um modelo k-means com três clusters usando o método de inicialização de cluster aleatório.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='KMEANS',
    NUM_CLUSTERS=3,
    KMEANS_INIT_METHOD='RANDOM') AS
SELECT
  *
FROM
  `mydataset.mytable`

Como treinar um modelo k-means com clusters personalizados

Neste exemplo, criamos um modelo k-means com quatro clusters usando o método de inicialização de cluster personalizado. init_col identifica a coluna do tipo BOOL que contém os valores que especificam se uma determinada linha é um centroide inicial. Essa coluna deve conter apenas três linhas com o valor TRUE.

CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE='KMEANS',
    NUM_CLUSTERS=3,
    KMEANS_INIT_METHOD='CUSTOM',
    KMEANS_INIT_COL='init_col') AS
SELECT
  init_col,
  features
FROM
  `mydataset.mytable`

Criação de modelo com TRANSFORM, excluindo colunas originais

A consulta a seguir treina um modelo após adicionar as colunas f1 e f2 da instrução SELECT para formar uma nova coluna c. As colunas f1 e f2 são omitidas dos dados de treinamento. O treinamento de modelo usa colunas f3 e label_col como elas aparecem na origem de dados t.

CREATE MODEL m
  TRANSFORM(f1 + f2 as c, * EXCEPT(f1, f2))
  OPTIONS(model_type=’linear_reg’, input_label_cols=['label_col'])
AS SELECT f1, f2, f3, label_col FROM t;