Declaración CREATE MODEL

Declaración CREATE MODEL

Usa la declaración CREATE MODEL de BigQuery ML para crear un modelo en BigQuery. Esta declaración es similar a la declaración DDL CREATE TABLE. Cuando ejecutas una consulta de SQL estándar que contiene una declaración CREATE MODEL, se genera un trabajo de consulta que procesa la consulta.

Sintaxis de 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' | 'AUTOML_REGRESSOR' | 'AUTOML_CLASSIFIER' | 'BOOSTED_TREE_CLASSIFIER' | 'BOOSTED_TREE_REGRESSOR' | 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' }
  [, 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 ]
  [, BUDGET_HOURS = float64_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 ]
  [, BOOSTER_TYPE = { 'gbtree' | 'dart'} ]
  [, NUM_PARALLEL_TREE = int64_value ]
  [, DART_NORMALIZE_TYPE = { 'tree' | 'forest'} ]
  [, TREE_METHOD = { 'auto' | 'exact' | 'approx' | 'hist'} ]
  [, MIN_TREE_CHILD_WEIGHT = float64_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 ])
  [, ACTIVATION_FN = { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' } ]
  [, BATCH_SIZE = int64_value ]
  [, DROPOUT = float64_value ]
  [, HIDDEN_UNITS = int_array ]
  [, OPTIMIZER = { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' } ]
  [, TIME_SERIES_TIMESTAMP_COL = string_value ]
  [, TIME_SERIES_DATA_COL = string_value ]
  [, TIME_SERIES_ID_COL = string_value ]
  [, HORIZON = int64_value ]
  [, AUTO_ARIMA = { TRUE | FALSE } ]
  [, AUTO_ARIMA_MAX_ORDER = int64_value ]
  [, NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value) ]
  [, DATA_FREQUENCY = { 'AUTO_FREQUENCY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'QUARTERLY' | 'YEARLY' } ]
  [, INCLUDE_DRIFT = { TRUE | FALSE } ]
  [, HOLIDAY_REGION = { 'GLOBAL' | 'NA' | 'JAPAC' | 'EMEA' | 'LAC' | 'AE' | ... } ]

No todas las opciones son aplicables para cada tipo de modelo. Para los modelos de TensorFlow, consulta la declaración CREATE MODEL para modelos de TensorFlow. Para los modelos de AutoML Tables, consulta la declaración CREATE MODEL para modelos de AutoML Tables.

CREATE MODEL

Crea y entrena un modelo nuevo en el conjunto de datos especificado. Si el nombre del modelo existe, CREATE MODEL muestra un error.

CREATE MODEL IF NOT EXISTS

Crea y entrena un modelo nuevo solo si el modelo no existe actualmente en el conjunto de datos especificado.

CREATE OR REPLACE MODEL

Crea y entrena un modelo y reemplaza el existente con el mismo nombre en el conjunto de datos especificado.

model_name

model_name es el nombre del modelo que estás creando o reemplazando. El nombre del modelo debe ser único por conjunto de datos: ningún otro modelo o tabla puede tener el mismo nombre. El nombre del modelo debe seguir las mismas reglas de denominación que una tabla de BigQuery. Estas son las características de un nombre de modelo:

  • Contiene hasta 1,024 caracteres.
  • Contiene letras (mayúsculas o minúsculas), números o guiones bajos.

model_name no distingue entre mayúsculas y minúsculas.

Si no tienes un proyecto predeterminado configurado, antepone el ID del proyecto al nombre del modelo con el siguiente formato, incluidos los acentos graves: `[PROJECT_ID].[DATASET].[MODEL]` ; por ejemplo, `myproject.mydataset.mymodel`.

TRANSFORM

TRANSFORM te permite especificar todo el procesamiento previo durante la creación del modelo y hacer que se aplique automáticamente durante la predicción y la evaluación.

Por ejemplo, puedes crear el siguiente 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 la predicción, no necesitas procesar previamente la entrada de nuevo, y las mismas transformaciones se restablecen de forma automática:

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

Cuando la cláusula TRANSFORM está presente, solo las columnas de salida de la cláusula TRANSFORM se usan en el entrenamiento. Se ignorará cualquier resultado de query_statement que no aparezca en la cláusula TRANSFORM.

Las columnas de entrada de la cláusula TRANSFORM son el resultado de query_statement. Por lo tanto, la entrada final que se usa en el entrenamiento es el conjunto de columnas que genera la siguiente consulta:

SELECT (select_list) FROM (query_statement);

Las columnas de entrada de la cláusula TRANSFORM pueden ser de cualquier tipo SIMPLE o ARREGLO de tipo SIMPLE. Los tipos SIMPLE son tipos de datos que no son STRUCT ni ARREGLO.

En la predicción (ML.PREDICT), los usuarios solo necesitan pasar las columnas originales de query_statement que se usan dentro de la cláusula TRANSFORM. No es necesario proporcionar las columnas que se muestran en TRANSFORM durante la predicción. TRANSFORM se aplica automáticamente a los datos de entrada durante la predicción, incluidas las estadísticas utilizadas en las funciones analíticas de ML (por ejemplo, ML.QUANTILE_BUCKETIZE).

select_list

Puedes pasar columnas desde query_statement hasta el modelo de entrenamiento sin transformación con *, * EXCEPT() o mediante una lista de los nombres de columna directamente.

No es necesario que todas las columnas de query_statement aparezcan en la cláusula TRANSFORM, por lo que puedes eliminar las columnas que aparecen en query_statement omitiéndolas de la cláusula TRANSFORM.

Puedes transformar entradas desde query_statement mediante el uso de expresiones en select_list. select_list es similar a una declaración SELECT normal. select_list admite la siguiente sintaxis:

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

Lo siguiente no puede aparecer dentro de select_list:

  • Funciones de agregación
  • Funciones analíticas que no son de AA Puedes encontrar todas las funciones analíticas de ML en funciones de procesamiento previo
  • UDF
  • Subconsultas
  • Columnas anónimas. Por ejemplo, "a + b as c" está permitido, mientras que "a + b" no.

Las columnas de salida de select_list pueden ser de cualquier tipo de datos compatible con BigQuery ML.

Si están presentes, las siguientes columnas deben aparecer en select_list sin transformación:

  • label
  • data_split_col
  • kmeans_init_col

Si query_statement muestra estas columnas, debes hacer referencia a ellas en select_list por el nombre de la columna fuera de cualquier expresión o mediante *. El uso de un alias con estas columnas no está permitido.

model_option_list

En model_option_list, se requiere la opción model_type. Todos los demás son opcionales.

CREATE MODEL admite las siguientes opciones:

MODEL_TYPE

Sintaxis

MODEL_TYPE = { 'LINEAR_REG' | 'LOGISTIC_REG' | 'KMEANS' |
'BOOSTED_TREE_REGRESSOR' | 'BOOSTED_TREE_CLASSIFIER' | 'DNN_CLASSIFIER' | 'DNN_REGRESSOR' }

Descripción

Especifica el tipo de modelo. Esta opción es obligatoria.

Argumentos

Regresión lineal ('LINEAR_REG') para la previsión; por ejemplo, las ventas de un artículo en un día determinado. Las etiquetas tienen un valor real: no pueden ser +/- infinito o NaN.

Regresión logística ('LOGISTIC_REG') para clasificación; por ejemplo, determinar si un cliente realizará una compra. Este modelo puede ser de dos tipos:

  • Regresión logística binaria para clasificación; por ejemplo, determinar si un cliente hará una compra. Las etiquetas solo deben tener dos valores posibles.
  • Regresión logística multiclase para clasificación. Estos modelos pueden usarse para predecir varios valores posibles; por ejemplo, si una entrada tiene un valor bajo, medio o alto. Las etiquetas pueden tener hasta 50 valores únicos. En BigQuery ML, el entrenamiento de regresión logística multiclase usa un clasificador multinomial con una función de pérdida de entropía cruzada.

'KMEANS' agrupamiento en clústeres de k-means para la segmentación de datos; por ejemplo, identificar segmentos de clientes. K-means es una técnica de aprendizaje no supervisado, por lo que el entrenamiento de modelos no requiere etiquetas ni datos divididos para el entrenamiento o la evaluación.

'TENSORFLOW' (Beta) crea un modelo mediante la importación de un modelo TensorFlow en BigQuery ML. Consulta la declaración CREATE MODEL para los modelos TensorFlow a fin de obtener más información.

'MATRIX_FACTORIZATION' Factorización de matrices para sistemas de recomendación. Por ejemplo, a partir de un conjunto de usuarios, elementos y algunas preferencias o calificaciones para un subconjunto de elementos, se crea un modelo a fin de predecir la preferencia de un usuario respecto de elementos con los que nunca interactuó y a los que nunca calificó. Si deseas obtener más información, consulta la declaración CREATE MODEL para modelos de factorización de matrices.

'AUTOML_REGRESSOR' (Beta) Crea un modelo de regresión mediante AutoML Tables. Consulta la declaración CREATE MODEL para modelos de AutoML Tables a fin de obtener más información.

'AUTOML_CLASSIFIER' (Beta) Crea un modelo de clasificación con AutoML Tables. Consulta la declaración CREATE MODEL para modelos de AutoML Tables a fin de obtener más información.

'BOOSTED_TREE_CLASSIFIER' (Beta) Crea un modelo clasificador de árbol mejorado mediante la biblioteca XGBoost. Consulta la declaración CREATE MODEL para modelos de árbol mejorado a fin de obtener más información.

'BOOSTED_TREE_REGRESSOR' (Beta) Crea un modelo regresor de árbol mejorado mediante la biblioteca XGBoost. Consulta la declaración CREATE MODEL para modelos de árbol mejorado a fin de obtener más información.

'DNN_CLASSIFIER' (Beta) Crea un modelo clasificador de redes neuronales profundas. Consulta la declaración CREATE MODEL para modelos de DNN a fin de obtener más información.

'DNN_REGRESSOR' (Beta) Crea un modelo regresor de redes neuronales profundas. Consulta la declaración CREATE MODEL para modelos de DNN a fin de obtener más información.

'ARIMA' Proporciona una modelo de serie temporal basada en ARIM para la previsión de series temporales. Por ejemplo, en una o varias series temporales, se crea un modelo o un conjunto de modelos de serie temporal a la vez para predecir datos futuros. A fin de obtener más información, consulta la declaración CREATE MODEL para modelos de serie temporal.

INPUT_LABEL_COLS

Sintaxis

INPUT_LABEL_COLS = string_array

Descripción

Son los nombres de las columnas de etiquetas en los datos de entrenamiento.

Argumentos

string_array es un ARRAY de STRING. Los tipos de modelos de regresión lineal y regresión logística solo admiten valores string_array que contienen un elemento.

OPTIMIZE_STRATEGY

Sintaxis

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

Descripción

Es la estrategia para entrenar modelos de regresión lineal.

Argumentos

Acepta los siguientes valores:

'AUTO_STRATEGY': determina la estrategia de entrenamiento de la siguiente manera:

  • Si se especifica l1_reg o warm_start, se utiliza la estrategia batch_gradient_descent.
  • Si las cardinalidades totales de los atributos de entrenamiento son superiores a 10,000, se usa la estrategia batch_gradient_descent.
  • Si hay un problema de ajuste excesivo, es decir, la cantidad de ejemplos de entrenamiento es inferior a 10x, en el que x es la cardinalidad total, se utiliza la estrategia batch_gradient_descent.
  • La estrategia NORMAL_EQUATION se usa para todos los demás casos.

'BATCH_GRADIENT_DESCENT': entrena el modelo con el método de descenso de gradientes de lotes, que optimiza la función de pérdida con la función de gradiente.

'NORMAL_EQUATION': calcula directamente la solución de mínimos cuadrados del problema de regresión lineal con la fórmula analítica. La ecuación normal no se puede usar en los siguientes casos:

  • Cuando se especifica l1_reg
  • Cuando se especifica warm_start
  • Cuando la cardinalidad total de los atributos de entrenamiento es de más de 10,000

Cuando el valor predeterminado es 'AUTO_STRATEGY'

L1_REG

Sintaxis

L1_REG = float64_value

Descripción

Se aplicó la cantidad de regularización L1.

Argumentos

float64_value es una FLOAT64. El valor predeterminado es 0.

L2_REG

Sintaxis

L2_REG = float64_value

Descripción

Se aplicó la cantidad de regularización L2.

Argumentos

float64_value es una FLOAT64. El valor predeterminado es 0.

MAX_ITERATIONS

Sintaxis

MAX_ITERATIONS = int64_value

Descripción

Es la cantidad máxima de iteraciones o pasos de entrenamiento.

Argumentos

int64_value es un INT64. El valor predeterminado es 20.

LEARN_RATE_STRATEGY

Sintaxis

LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' }

Descripción

Es la estrategia para especificar la tasa de aprendizaje durante el entrenamiento.

Argumentos

'LINE_SEARCH': usa el método de búsqueda de línea para calcular la tasa de aprendizaje. La tasa de aprendizaje inicial de búsqueda de línea es el valor especificado para LS_INIT_LEARN_RATE.

La búsqueda de líneas disminuye el entrenamiento y aumenta la cantidad de bytes procesados, pero, por lo general, converge incluso con una mayor tasa de aprendizaje inicial especificada.

'CONSTANT': establece la tasa de aprendizaje en el valor especificado para LEARN_RATE.

El valor predeterminado es 'LINE_SEARCH'.

LEARN_RATE

Sintaxis

LEARN_RATE = float64_value

Descripción

Es la tasa de aprendizaje para el descenso de gradientes cuando LEARN_RATE_STRATEGY se establece en CONSTANT. Si LEARN_RATE_STRATEGY se establece en 'LINE_SEARCH', se muestra un error.

Argumentos

float64_value es una FLOAT64. El valor predeterminado es 0.1.

EARLY_STOP

Sintaxis

EARLY_STOP = { TRUE | FALSE }

Descripción

Indica si el entrenamiento debe detenerse después de la primera iteración en la que la mejora de la pérdida relativa es menor que el valor especificado para MIN_REL_PROGRESS.

Argumentos

El valor es BOOL. El valor predeterminado es TRUE.

MIN_REL_PROGRESS

Sintaxis

MIN_REL_PROGRESS = float64_value

Descripción

La mejora de pérdida relativa mínima que se necesita para continuar con el entrenamiento cuando se configura EARLY_STOP como verdadero. Por ejemplo, un valor de 0.01 especifica que cada iteración debe reducir la pérdida en un 1% para que el entrenamiento continúe.

Argumentos

float64_value es un FLOAT64. El valor predeterminado es 0.01.

DATA_SPLIT_METHOD

Sintaxis

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

Descripción

Es el método para dividir los datos de entrada en conjuntos de entrenamiento y evaluación. Los datos de entrenamiento se utilizan para entrenar el modelo. Los datos de evaluación se utilizan para evitar un sobreajuste mediante interrupciones anticipadas.

Argumentos

Acepta los siguientes valores:

'AUTO_SPLIT': esta es la estrategia de división automática:

  • Cuando hay menos de 500 filas en los datos de entrada, todas las filas se utilizan como datos de entrenamiento.
  • Cuando hay entre 500 y 50,000 filas en los datos de entrada, el 20% de los datos se utiliza como datos de evaluación en una división RANDOM.
  • Cuando hay más de 50,000 filas en los datos de entrada, solo 10,000 de ellos se usan como datos de evaluación en una división RANDOM.

'RANDOM': divide datos de forma aleatoria. Una división aleatoria es determinista: las diferentes ejecuciones de entrenamiento producen los mismos resultados de división si los datos de entrenamiento subyacentes siguen siendo los mismos.

'CUSTOM': divide datos con una columna de tipo BOOL que proporciona el cliente. Las filas con un valor de TRUE se utilizan como datos de evaluación. Las filas con un valor de FALSE se utilizan como datos de entrenamiento.

'SEQ': divide datos de forma secuencial mediante el uso de una columna que proporciona el cliente. La columna puede tener cualquier tipo de datos que se pueda ordenar: NUMERIC, STRING o TIMESTAMP. Todas las filas con valores divididos más pequeños que el umbral se usan como datos de entrenamiento. Las filas restantes, incluidas NULLs, se utilizan como datos de evaluación.

'NO_SPLIT': Usa todos los datos como datos de entrenamiento.

El valor predeterminado es 'AUTO_SPLIT' para los modelos de regresión lineal y regresión logística.

El valor predeterminado es 'NO_SPLIT' para los modelos de factorización de matrices. Si decides usar un método de división diferente, asegúrate de que todos los usuarios y elementos tengan filas suficientes en el conjunto de entrenamiento para compilar un buen modelo.

Esta opción no es compatible con los modelos de TensorFlow o k-means.

DATA_SPLIT_EVAL_FRACTION

Sintaxis

DATA_SPLIT_EVAL_FRACTION = float64_value

Descripción

Esta opción se usa con divisiones 'RANDOM' y 'SEQ'. Especifica la fracción de los datos utilizados para la evaluación, con una precisión de dos decimales.

Argumentos

float64_value es un FLOAT64. El valor predeterminado es 0.2.

DATA_SPLIT_COL

Sintaxis

DATA_SPLIT_COL = string_value

Descripción

Identifica la columna utilizada para dividir los datos. Esta columna no se puede usar como un atributo ni como una etiqueta, y se excluirá de los atributos automáticamente.

  • Cuando el valor de DATA_SPLIT_METHOD es 'CUSTOM', la columna correspondiente debe ser del tipo BOOL. Las filas con valores TRUE o NULL se usan como datos de evaluación. Las filas con valores FALSE se usan como datos de entrenamiento.

  • Cuando el valor de DATA_SPLIT_METHOD es 'SEQ', las últimas filas n de menor a mayor en la columna correspondiente se usan como datos de evaluación; n es el valor especificado para DATA_SPLIT_EVAL_FRACTION. Las primeras filas se usan como datos de entrenamiento.

Para obtener información sobre los tipos de entrada admitidos, consulta Tipos de entrada admitidos para DATA_SPLIT_COL.

Para obtener más información sobre cómo usar DATA_SPLIT_COL con los tipos de modelos de AutoML, consulta la declaración CREATE MODEL para los modelos de AutoML Tables.

Argumentos

string_value es una STRING.

LS_INIT_LEARN_RATE

Sintaxis

LS_INIT_LEARN_RATE = float64_value

Descripción

Establece la tasa de aprendizaje inicial que LEARN_RATE_STRATEGY='LINE_SEARCH' usa. Esta opción solo se puede usar si se especifica LINE_SEARCH.

Si el modelo LEARN_RATE parece estar duplicando cada iteración como lo indica ML.TRAINING_INFO, intenta configurar LS_INIT_LEARN_RATE en la última tasa de aprendizaje duplicada. La tasa de aprendizaje inicial óptima es diferente para cada modelo. Una buena tasa de aprendizaje inicial para un modelo podría no ser buena para otro.

Argumentos

float64_value es una FLOAT64.

WARM_START

Sintaxis

WARM_START = { TRUE | FALSE }

Descripción

Vuelve a entrenar un modelo con nuevos datos de entrenamiento, nuevas opciones de modelo o ambos. A menos que se anule explícitamente, las opciones iniciales utilizadas para entrenar el modelo se utilizan en la ejecución de inicio en caliente.

En una ejecución de inicio en caliente, los números de iteración se restablecen para comenzar desde cero. El número TRAINING_RUN o las columnas TIMESTAMP se pueden utilizar para distinguir la ejecución de inicio en caliente de la ejecución original.

El valor de las opciones MODEL_TYPE y LABELS y el esquema de datos de entrenamiento deben permanecer constantes en un inicio en caliente. La opción warm_start solo es compatible con los modelos LINEAR_REG, LOGISTIC_REG, KMEANS, DNN_REGRESSOR y DNN_CLASSIFIER que se vuelven a entrenar.

Argumentos

Acepta un BOOL. El valor predeterminado es FALSE.

AUTO_CLASS_WEIGHTS

Sintaxis

AUTO_CLASS_WEIGHTS = { TRUE | FALSE }

Descripción

Si se deben equilibrar las etiquetas de clase mediante pesos para cada clase en proporción inversa a la frecuencia de esa clase

Úsalo con boosted_tree_classifier, DNN_CLASSIFIER, regresiones logísticas y logísticas multiclase.

De forma predeterminada, los datos de entrenamiento que se usan para crear un modelo clasificador de dnn, de regresión logística multiclase y clasificador de árbol mejorado no están ponderados. Si las etiquetas en los datos de entrenamiento no tienen un equilibrio, el modelo puede aprender a predecir la clase de etiquetas más popular, lo que podría no ser conveniente.

Para equilibrar cada clase, usa la siguiente fórmula:

total_input_rows / (input_rows_for_class_n * number_of_unique_classes)

Argumentos

Acepta un BOOL. El valor predeterminado es FALSE.

CLASS_WEIGHTS

Sintaxis

CLASS_WEIGHTS = struct_array

Descripción

Son los pesos que se utilizan para cada etiqueta de clase. Esta opción no se puede especificar si se indica AUTO_CLASS_WEIGHTS.

Argumentos

struct_array es un ARRAY de STRUCT; cada STRUCT contiene una STRING que contiene la etiqueta de clase y un FLOAT64 que contiene el peso de esa etiqueta. Debe haber un peso para cada etiqueta de clase. No es necesario que los pesos sumen uno. Por ejemplo:

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

NUM_CLUSTERS

Sintaxis

NUM_CLUSTERS = int64_value

Descripción

Para un modelo de k-medias, es el número de clústeres a fin de identificar en los datos de entrada.

Argumentos

int64_value es un INT64. Se permiten valores incluidos en el rango del 2 al 100. El valor predeterminado es log10(n), en el que n es la cantidad de ejemplos de entrenamiento.

KMEANS_INIT_METHOD

Sintaxis

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

Descripción

Para un modelo de k-medias, es el método de inicialización de los clústeres.

Para usar los mismos centroides en consultas repetidas CREATE MODEL, especifica la opción 'CUSTOM'.

Argumentos

'RANDOM': inicializa los centroides mediante la selección aleatoria de puntos de datos de NUM_CLUSTERS de los datos de entrada.

'KMEANS++': inicializa centroides NUM_CLUSTERS mediante el algoritmo KMEANS++. 'KMEANS++' entrena un modelo mejor que la inicialización de clúster 'RANDOM'.

'CUSTOM': inicializa los centroides con una columna proporcionada del tipo BOOL. Esta columna se especifica mediante la opción 'KMEANS_INIT_COL'. BigQuery ML utiliza las filas con un valor de TRUE como los centroides iniciales. Cuando esta opción está presente y los valores en 'KMEANS_INIT_COL' son constantes, las consultas repetidas CREATE MODEL usan los mismos centroides.

El valor predeterminado es 'RANDOM'.

KMEANS_INIT_COL

Sintaxis

KMEANS_INIT_COL = string_value

Descripción

En un modelo k-means, identifica la columna utilizada para inicializar los centroides. Si esta columna contiene un valor de TRUE para una fila dada, BigQuery ML usa esa fila como un centroide inicial.

Esta opción solo se puede especificar cuando 'KMEANS_INIT_METHOD' tiene el valor 'CUSTOM'. La columna correspondiente debe ser del tipo BOOL. La opción de modelo NUM_CLUSTERS debe estar presente en la consulta y su valor debe ser igual al número total de filas TRUE en esta columna. BigQuery ML no puede usar esta columna como un atributo y la excluye de los atributos automáticamente.

Argumentos

string_value es una STRING.

DISTANCE_TYPE

Sintaxis

DISTANCE_TYPE = { 'EUCLIDEAN' | 'COSINE' }

Descripción

En un modelo k-means, es el tipo de métrica para calcular la distancia entre dos puntos.

Argumentos

Acepta los siguientes valores:

'EUCLIDEAN': usa la siguiente ecuación para calcular la distancia entre el punto x y y:

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

'COSINE': usa la siguiente ecuación para calcular la distancia:

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

donde \( \lVert x\rVert_{2} \) representa la norma L2 para x.

El valor predeterminado es 'EUCLIDEAN'.

STANDARDIZE_FEATURES

Sintaxis

STANDARDIZE_FEATURES = { TRUE | FALSE }

Descripción

Para un modelo kmeans, si se deben estandarizar los atributos numéricos

Argumentos

Acepta un BOOL. El valor predeterminado es TRUE.

MODEL_PATH

Sintaxis

MODEL_PATH = string_value

Descripción

En los tipos de modelo de TensorFlow, especifica la ubicación del modelo TensorFlow para importar.

string_value es la ubicación de un depósito de Google Cloud Storage que contiene el modelo para importar.

Consulta la declaración CREATE MODEL para los modelos TensorFlow a fin de obtener más información.

Ejemplo

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

FEEDBACK_TYPE

Sintaxis

FEEDBACK_TYPE = { 'EXPLICIT' | 'IMPLICIT' }

Descripción

Especifica el tipo de comentarios de los modelos de factorización de matrices que cambia el algoritmo usado durante el entrenamiento.

Para obtener más información, lee sobre los modelos de factorización de matrices.

Argumentos

El valor predeterminado es 'EXPLICIT'.

NUM_FACTORS

Sintaxis

NUM_FACTORS = int64_value

Descripción

Especifica la cantidad de factores latentes que se usarán en los modelos de factorización de matrices.

Argumentos

int64_value es un 'INT64'. Se permiten valores incluidos en el rango del 2 al 200. El valor predeterminado es log2(n), en el que n es la cantidad de ejemplos de entrenamiento.

USER_COL

Sintaxis

USER_COL = string_value

Descripción

El nombre de la columna de usuarios de los modelos de factorización de matrices.

Argumentos

string_value es una 'STRING'. El valor predeterminado es 'user'.

ITEM_COL

Sintaxis

ITEM_COL = string_value

Descripción

El nombre de la columna de elementos de los modelos de factorización de matrices.

Argumentos

string_value es una 'STRING'. El valor predeterminado es 'item'.

RATING_COL

Sintaxis

RATING_COL = string_value

Descripción

El nombre de la columna de calificaciones de los modelos de factorización de matrices.

Argumentos

string_value es una 'STRING'. El valor predeterminado es 'rating'.

WALS_ALPHA

Sintaxis

WALS_ALPHA = float64_value

Descripción

Un hiperparámetro del modelo de factorización de matrices 'IMPLICIT'. Para obtener más información, lee sobre los modelos de factorización de matrices.

Argumentos

float64_value es un 'FLOAT64'. El valor predeterminado es 40.

BUDGET_HOURS

Sintaxis

BUDGET_HOURS = float64_value

Descripción

Establece el presupuesto de entrenamiento para AutoML Tables, que se especifica en horas. El valor predeterminado es 1.0 y debe estar entre 1.0 y 72.0. Esta opción solo se puede usar si MODEL_TYPE es AUTOML_REGRESSOR o AUTOML_CLASSIFIER.

Después de entrenar modelos de AutoML Tables, BigQuery ML comprime el modelo a fin de que sea lo suficientemente pequeño como para importarlo, lo que puede demorar hasta el 50% del tiempo de entrenamiento. El tiempo para comprimir el modelo no se incluye en el tiempo del presupuesto de entrenamiento.

A fin de obtener más información, consulta la declaración CREATE MODEL para modelos de AutoML Tables.

Argumentos

float64_value es un FLOAT64.

BOOSTER_TYPE

Sintaxis

BOOSTER_TYPE =  { 'GBTREE' | 'DART'}

Descripción

Para los modelos de árbol mejorado, especifica el tipo de booster que se usará, con el valor predeterminado GBTREE.

Argumentos

Las siguientes opciones están disponibles:

NUM_PARALLEL_TREE

Sintaxis

NUM_PARALLEL_TREE = int64_value

Descripción

Cantidad de árboles paralelos construidos durante cada iteración. El valor predeterminado es 1. Para entrenar un bosque aleatorio mejorado, establece este valor como mayor que 1.

DART_NORMALIZE_TYPE

Sintaxis

DART_NORMALIZE_TYPE = { 'TREE' | 'FOREST'}

Descripción

Tipo de algoritmo de normalización para el booster de DART. El valor predeterminado es TREE.

TREE_METHOD

Sintaxis

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

Descripción

Tipo de algoritmo de construcción de árboles. El valor predeterminado es AUTO.

HIST se recomienda para conjuntos de datos grandes a fin de lograr una velocidad de entrenamiento más rápida y un menor consumo de recursos. Para obtener más información, consulta aumentador de árbol.

MIN_TREE_CHILD_WEIGHT

Sintaxis

MIN_TREE_CHILD_WEIGHT = float64_value

Descripción

Suma mínima del peso de la instancia que se necesita en un elemento secundario para una mayor partición. Si el paso de partición de árbol da como resultado un nodo hoja con la suma del peso de la instancia menor que min_tree_child_weight, el proceso de compilación dejará de realizar particiones. Cuanto mayor sea el valor de min_tree_child_weight, más conservador será el algoritmo. El valor debe ser mayor o igual que 0, con el valor predeterminado 1.

COLSAMPLE_BYTREE

Sintaxis

COLSAMPLE_BYTREE = float64_value

Descripción

Proporción de submuestra de columnas cuando se construye cada árbol. El submuestreo ocurre una vez por cada árbol construido. El valor debe estar entre 0 y 1, con el valor predeterminado 1.

COLSAMPLE_BYLEVEL

Sintaxis

COLSAMPLE_BYLEVEL = float64_value

Descripción

Proporción de submuestra de columnas para cada nivel. El submuestreo ocurre una vez por cada nivel de profundidad nuevo alcanzado en un árbol. Las columnas se submuestran a partir del conjunto de columnas elegido para el árbol actual. El valor debe estar entre 0 y 1, con el valor predeterminado 1.

COLSAMPLE_BYNODE

Sintaxis

COLSAMPLE_BYNODE = float64_value

Descripción

Proporción de submuestra de columnas para cada nodo (división). El submuestreo ocurre una vez por cada vez que se evalúa una nueva división. Las columnas se submuestran a partir del conjunto de columnas elegido para el nivel actual. El valor debe estar entre 0 y 1, con el valor predeterminado 1.

MIN_SPLIT_LOSS

Sintaxis

MIN_SPLIT_LOSS = float64_value

Descripción

Reducción de pérdida mínima necesaria para realizar una partición adicional en un nodo hoja del árbol. Cuanto mayor sea el valor de min_split_loss, más conservador será el algoritmo. El valor predeterminado es 0.

MAX_TREE_DEPTH

Sintaxis

MAX_TREE_DEPTH = int64_value

Descripción

La profundidad máxima de un árbol. El valor predeterminado es 6.

SUBSAMPLE

Sintaxis

SUBSAMPLE = float64_value

Descripción

Proporción de submuestra de las instancias de entrenamiento. Establecer este valor en 0.5 significa que el entrenamiento toma muestras aleatorias de la mitad de los datos de entrenamiento antes del crecimiento de los árboles, lo que evita el sobreajuste. El submuestreo ocurrirá una vez en cada iteración de boosting. Es independiente de la división de datos de prueba de entrenamiento que se usa en las opciones de entrenamiento (80/20 al azar de forma predeterminada). Los datos de prueba no se usan en ninguna iteración, sin importar la submuestra. Esta solo se aplica a los datos de entrenamiento. El valor debe estar entre 0 y 1, con el valor predeterminado 1.0 (usa todos los datos de entrenamiento en cada iteración).

ACTIVATION_FN

Sintaxis

ACTIVATION_FN =  { 'RELU' | 'RELU6' | 'CRELU' | 'ELU' | 'SELU' | 'SIGMOID' | 'TANH' }

Descripción

Para los tipos de modelo de DNN, especifica la función de activación de la red neuronal.

Argumentos

Las siguientes opciones están disponibles:

BATCH_SIZE

Sintaxis

BATCH_SIZE = int64_value

Descripción

Para los tipos de modelo de DNN, especifica el tamaño del minilote de las muestras que se envían a la red neuronal.

Argumentos

El valor predeterminado es el valor menor de 1,024 y la cantidad de muestras.

El valor máximo es de 8,192.

DROPOUT

Sintaxis

DROPOUT = float64_value

Descripción

Para los tipos de modelo de DNN, especifica la tasa de abandono de unidades en la red neuronal.

Argumentos

El valor predeterminado es 0. Una entrada válida debe ser entre 0.0 y 1.0.

HIDDEN_UNITS

Sintaxis

HIDDEN_UNITS = int_array

Descripción

Para los tipos de modelo de DNN, especifica las capas ocultas de la red neuronal.

Argumentos

Un arreglo de números enteros que representa la arquitectura de las capas ocultas. Si no se especifica, BigQuery ML aplica una sola capa oculta que no contiene más de 128 unidades.

Ejemplo

HIDDEN_UNITS = [256, 128, 64]

En este ejemplo, se representa una arquitectura de 3 capas ocultas con 256, 128 y 64 nodos, respectivamente.

OPTIMIZER

Sintaxis

OPTIMIZER =  { 'ADAGRAD' | 'ADAM' | 'FTRL' | 'RMSPROP' | 'SGD' }

Descripción

Para los tipos de modelo de DNN, especifica el optimizador a fin de entrenar el modelo.

Argumentos

Las siguientes opciones están disponibles:

TIME_SERIES_TIMESTAMP_COL

Sintaxis

TIME_SERIES_TIMESTAMP_COL = string_value

Descripción

El nombre de la columna de marca de tiempo para los modelos de serie temporal.

Argumentos

string_value es una 'STRING'.

TIME_SERIES_DATA_COL

Sintaxis

TIME_SERIES_DATA_COL = string_value

Descripción

El nombre de la columna de datos para los modelos de serie temporal.

Argumentos

string_value es una 'STRING'.

TIME_SERIES_ID_COL

Sintaxis

TIME_SERIES_ID_COL = string_value

Descripción

El nombre de la columna ID para los modelos de serie temporal. Esta columna se usa cuando el usuario desea ajustar y prever varias series temporales mediante una sola consulta. Los distintos ID indican series temporales diferentes.

Argumentos

string_value es una 'STRING'.

HORIZON

Sintaxis

HORIZON = int64_value

Descripción

La cantidad de puntos temporales a prever. Cuando se realiza una previsión de varias series temporales a la vez, este parámetro se aplica a cada serie temporal.

Argumentos

El valor es INT64. El valor predeterminado es 1,000. El valor máximo es 10,000.

AUTO_ARIMA

Sintaxis

AUTO_ARIMA = { TRUE | FALSE }

Descripción

Indica si el proceso de entrenamiento debe usar auto.ARIMA o no. Si es verdadero, el entrenamiento encuentra de forma automática el mejor orden no estacional (por ejemplo, la tupla p, d, q) y decide si incluir o no un término de desvío lineal cuando d es 1. Si es falso, el usuario debe especificar el valor non_seasonal_order en la consulta. Cuando se realizan previsiones de varias series temporales al mismo tiempo, el algoritmo auto.ARIMA se debe usar para cada serie temporal, por lo que esta opción no debe configurarse como falsa.

Argumentos

El valor es BOOL. El valor predeterminado es TRUE.

AUTO_ARIMA_MAX_ORDER

Sintaxis

AUTO_ARIMA_MAX_ORDER = <var>int64_value</var>

Descripción

Es el valor máximo para la suma de p y q no estacionales. Controla el espacio de búsqueda de parámetros en el algoritmo auto.ARIMA. Por el momento, los valores permitidos son (2, 3, 4, 5). Como referencia, para cada valor hay (6, 10, 15, 21) modelos posibles para evaluar si se determina que esta última no es 0 o 2. Si se determina que no son de temporada, se considera 1 como cantidad de modelos candidatos para evaluar dobles, ya que hay un término de evaluación adicional que se debe considerar para todos los modelos de candidatos existentes. Esta opción está inhabilitada cuando AUTO_ARIMA se configura como falso.

Argumentos

El valor es INT64. El valor predeterminado es 5. El valor mínimo es 2, y el valor máximo es 5.

NON_SEASONAL_ORDER

Sintaxis

NON_SEASONAL_ORDER = (int64_value, int64_value, int64_value)

Descripción

La tupla p, d, q no estacional para el modelo ARIMA. No hay valores predeterminados y debes especificarlos todos. Debes especificar de forma explícita auto_arima como falso para usar esta opción. En la actualidad, p y q están restringidos a [0, 1, 2, 3, 4, 5] y d está restringido a [0, 1, 2]. Cuando se prevén varias series temporales al mismo tiempo, es muy poco probable que un orden no estacional específico se ajuste a todas las series temporales y el algoritmo auto.ARIMA se usa a fin de encontrar el mejor orden no estacional para cada serie temporal. Por lo tanto, esta opción está inhabilitada en este caso.

Argumentos

(int64_value, int64_value, int64_value) es una tupla de tres 'INT64'.

DATA_FREQUENCY

Sintaxis

DATA_FREQUENCY = { 'AUTO_FREQUENCY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'QUARTERLY' | 'YEARLY' }

Descripción

La frecuencia de datos de la serie temporal de entrada. El nivel de detalle más alto admitido es 'HOURLY'. Cuando se realiza una previsión de varias series temporales a la vez, este argumento no se puede cambiar del valor predeterminado 'AUTO_FREQUENCY'.

Argumentos

Acepta los siguientes valores:

'AUTO_FREQUENCY': El proceso de entrenamiento infiere de forma automática la frecuencia de datos, que puede ser uno de los valores que se enumeran a continuación.

'HOURLY': Series temporales por hora

'DAILY': Series temporales diarias

'WEEKLY': Series temporales semanales

'MONTHLY': Series temporales mensuales

'QUARTERLY': Series temporales trimestrales

'YEARLY': Series temporales anuales

El valor predeterminado es 'AUTO_FREQUENCY'.

INCLUDE_DRIFT

Sintaxis

INCLUDE_DRIFT = { TRUE | FALSE }

Descripción

Indica si el modelo ARIMA debe incluir un término de desvío lineal o no. El término de desvío es aplicable cuando la d no estacional es 1.

  • Cuando se configura el valor de auto-arima como falso, el argumento predeterminado es falso. Se puede configurar como verdadero solo cuando la d no estacional es 1; de lo contrario, se mostrará un error de consulta no válida.

  • Cuando se configura el valor de auto-arima como verdadero, se decide de forma automática si se incluye un término de desvío lineal. Por lo tanto, esta opción está inhabilitada para auto-ARIMA.

Argumentos

El valor es BOOL. El valor predeterminado es FALSE porque auto_arima está inhabilitado.

HOLIDAY_REGION

Sintaxis

HOLIDAY_REGION = { 'GLOBAL' | 'NA' | 'JAPAC' | 'EMEA' | 'LAC' | 'AE' | ... }

Descripción

La región geográfica en la que se aplican los efectos de festividades en el modelado. De forma predeterminada, el modelado de efectos de festividades está inhabilitado. Para activarlo, especifica la región de festividades mediante esta opción.

Argumentos

Acepta los siguientes valores:

Nivel superior: global

  • 'GLOBAL'

Segundo nivel: regiones continentales

  • 'NA': Norteamérica
  • 'JAPAC': Japón y Asia‑Pacífico
  • 'EMEA': Europa, Oriente Medio y África
  • 'LAC': América Latina y el Caribe

Tercer nivel: países o regiones

  • 'AE': Emiratos Árabes Unidos
  • 'AR': Argentina
  • 'AT': Austria
  • 'AU': Australia
  • 'BE': Bélgica
  • 'BR': Brasil
  • 'CA': Canadá
  • 'CH': Suiza
  • 'CL': Chile
  • 'CN': China
  • 'CO': Colombia
  • 'CZ': República Checa
  • 'DE': Alemania
  • 'DK': Dinamarca
  • 'DZ': Argelia
  • 'EC': Ecuador
  • 'EE': Estonia
  • 'EG': Egipto
  • 'ES': España
  • 'FI': Finlandia
  • 'FR': Francia
  • 'GB': Reino Unido
  • 'GR': Grecia
  • 'HK': Hong Kong
  • 'HU': Hungría
  • 'ID': Indonesia
  • 'IE': Irlanda
  • 'IL': Israel
  • 'IN': India
  • 'IR': Irán
  • 'IT': Italia
  • 'JP': Japón
  • 'KR': Corea del Sur
  • 'LV': Letonia
  • 'MA': Marruecos
  • 'MX': México
  • 'MY': Malasia
  • 'NG': Nigeria
  • 'NL': Países Bajos
  • 'NO': Noruega
  • 'NZ': Nueva Zelanda
  • 'PE': Perú
  • 'PH': Filipinas
  • 'PK': Pakistán
  • 'PL': Polonia
  • 'PT': Portugal
  • 'RO': Rumania
  • 'RS': Serbia
  • 'RU': Rusia
  • 'SA': Arabia Saudita
  • 'SE': Suecia
  • 'SG': Singapur
  • 'SI': Eslovenia
  • 'SK': Eslovaquia
  • 'TH': Tailandia
  • 'TR': Turquía
  • 'TW': Taiwán
  • 'UA': Ucrania
  • 'US': Estados Unidos
  • 'VE': Venezuela
  • 'VN': Vietnam
  • 'ZA': Sudáfrica

query_statement

La cláusula AS query_statement especifica la consulta de SQL estándar que se utiliza para generar los datos de entrenamiento. Consulta la página Sintaxis de consultas de SQL estándar para conocer la sintaxis de SQL admitida de la cláusula query_statement.

Todas las columnas a las que hace referencia query_statement se usan como entradas para el modelo, excepto las columnas incluidas en input_label_cols y data_split_col.

Entradas compatibles

La declaración CREATE MODEL admite los siguientes tipos de datos para etiquetas de entrada y columnas de división de datos.

Tipos de datos admitidos para columnas de etiquetas de entrada

BigQuery ML admite diferentes tipos de datos de SQL estándar según el tipo de modelo. Estos son los tipos de datos admitidos para input_label_cols:

Model type Supported label types
linear_reg INT64
NUMERIC
FLOAT64
logistic_reg Cualquier tipo de datos agrupables
kmeans Cualquier tipo de datos agrupables

Tipos de datos admitidos para columnas de datos divididos

BigQuery ML admite diferentes tipos de datos de SQL estándar según el método de división de datos. Estos son los tipos de datos admitidos para data_split_col:

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

Limitaciones

Las declaraciones CREATE MODEL deben cumplir con las siguientes reglas:

  • Se permite solo una declaración CREATE.
  • Cuando usas una declaración CREATE MODEL, el tamaño del modelo debe ser de 90 MB o menos, o la consulta fallará. En general, si todas las variables categóricas son strings cortas, se admite una cardinalidad de atributo total (dimensión del modelo) de 5 a 10 millones. La dimensionalidad depende de la cardinalidad y la longitud de las variables de string.
  • La columna de etiquetas no puede contener valores NULL. Si la columna de etiquetas contiene valores NULL, la consulta fallará.
  • Por el momento, la cláusula CREATE MODEL IF NOT EXISTS siempre actualiza la última marca de tiempo modificada de un modelo.
  • Para los modelos de regresión lineal, la columna label debe tener valores reales (los valores de columna no pueden ser +/- infinito o NaN).
  • Para los modelos de regresión logística, las columnas de etiquetas pueden contener hasta 50 valores únicos; es decir, la cantidad de clases es menor o igual que 50.

Transformaciones de variables de entrada

BigQuery ML transforma las variables o atributos de entrada de la siguiente manera:

Tipo de datos de entrada Método de transformación Detalles
INT64
NUMERIC
FLOAT64
Estandarización Para todas las columnas numéricas, BigQuery ML estandariza y centra la columna en cero antes de pasarla al entrenamiento, excepto para los modelos de árbol mejorado. Cuando se crea un modelo k-means, la opción STANDARDIZE_FEATURES especifica si se deben estandarizar los atributos numéricos.
BOOL
STRING
BYTES
DATE
DATETIME
TIME
Codificación one-hot Para todas las columnas no numéricas que no son de arreglo, excepto TIMESTAMP, BigQuery ML realiza una transformación de codificación one-hot, excepto en los modelos de árbol mejorado. Esta transformación genera un atributo independiente para cada valor único en la columna. La transformación de codificación de etiquetas se aplica para entrenar modelos de árbol mejorado a fin de convertir cada valor único en un valor numérico.
ARRAY Codificado multi-hot Para todas las columnas ARRAY no numéricas, BigQuery ML realiza una transformación de codificación multi-hot. Esta transformación genera un atributo independiente para cada elemento único en el ARRAY.
TIMESTAMP Transformación de marca de tiempo Cuando BigQuery ML encuentra una columna TIMESTAMP, extrae un conjunto de componentes de TIMESTAMP y realiza una combinación de estandarización y codificación one-hot en los componentes extraídos. Para el componente de tiempo Unix en segundos, BigQuery ML utiliza la estandarización. Para todos los demás componentes, utiliza codificación one-hot.

Puedes usar la función ML.WEIGHTS para ver la transformación de una columna TIMESTAMP en varias columnas de atributos.
STRUCT Expansión de estructura Cuando BigQuery ML encuentra una columna STRUCT, expande los campos dentro de STRUCT a columnas individuales. Requiere que se nombren todos los campos. No se permite STRUCT anidado. Los nombres de las columnas después de la expansión tienen el formato {struct_name}_{field_name}.

Asignación

En las estadísticas, la asignación se usa para reemplazar los datos faltantes con valores sustituidos. Cuando entrenas un modelo en BigQuery ML, los valores NULL se tratan como datos faltantes. Cuando predices resultados en BigQuery ML, puede haber valores faltantes cuando BigQuery ML encuentra un valor NULL o un valor nunca visto anteriormente. BigQuery ML maneja los datos faltantes en función de si la columna es numérica, tiene codificación one-hot o es una marca de tiempo.

Columnas numéricas

Tanto en el entrenamiento como en la predicción, los valores NULL de las columnas numéricas se reemplazan por el valor promedio que calcula la columna de atributos en los datos de entrada originales.

Columnas con codificación one-hot o multi-hot

Tanto en el entrenamiento como en la predicción, los valores NULL en las columnas codificadas se asignan a una categoría adicional que se agrega a los datos. Los datos no vistos anteriormente tienen asignado un peso de 0 durante la predicción.

Columnas de marca de tiempo

Las columnas TIMESTAMP usan una combinación de métodos de asignación de columnas estandarizadas y con codificación one-hot. Para la columna de tiempo de Unix generada, BigQuery ML reemplaza los valores con el tiempo promedio de Unix en las columnas originales. Para otros valores generados, BigQuery ML los asigna a la categoría NULL correspondiente para cada atributo extraído.

Columnas STRUCT

Tanto en el entrenamiento como en la predicción, cada campo de STRUCT se asigna según su tipo.

Ejemplos de CREATE MODEL

La declaración CREATE MODEL crea un modelo con las opciones especificadas. Si el nombre del modelo existe en el conjunto de datos, se muestra el siguiente error:

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

Para reemplazar un modelo existente, usa la declaración CREATE OR REPLACE MODEL en su lugar.

Los siguientes ejemplos crean modelos denominados mymodel en mydataset en tu proyecto predeterminado.

Entrena un modelo de regresión lineal

En el siguiente ejemplo, se crea y entrena un modelo de regresión lineal. La tasa de aprendizaje se establece en 0.15, la regularización L1 en 1 y el número máximo de iteraciones de entrenamiento en 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

Entrena un modelo de regresión lineal con una división de datos secuencial

En este ejemplo, crearás un modelo de regresión lineal con una división de datos secuencial. La fracción de división es 0.3 y la división utiliza la columna timestamp como base para la división.

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

Entrena un modelo de regresión lineal con una división de datos personalizada

En este ejemplo, dividiste de forma manual los datos en una tabla de entrenamiento y una tabla de evaluación. La tabla de entrenamiento se llama training_table. La tabla de evaluación se llama evaluation_table.

Este comando crea un modelo de regresión lineal con un método de división personalizado y entrena el modelo mediante la unión de los datos de las tablas de evaluación y entrenamiento.

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`

En este ejemplo, todas las columnas en las tablas de entrenamiento y evaluación son atributos o etiquetas. La consulta usa SELECT * y UNION ALL para anexar todos los datos de la columna split_col a los datos existentes.

Entrena un modelo de regresión logística multiclase con pesos calculados automáticamente

En este ejemplo, crearás un modelo de regresión logística multiclase con la opción auto_class_weights.

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

Entrena un modelo de regresión logística multiclase con pesos especificados

En este ejemplo, crearás un modelo de regresión logística multiclase con la opción class_weights. Las columnas de etiquetas son label1, label2 y 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`

Entrena un modelo de regresión logística con pesos especificados

En este ejemplo, crearás un modelo de regresión logística con la opción class_weights.

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

Entrena un modelo k-means

En este ejemplo, crearás un modelo k-means con cuatro clústeres que utilizan el valor predeterminado distance_type de euclidean_distance.

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

Entrena un modelo k-means con clústeres aleatorios

En este ejemplo, se crea un modelo k-means con tres clústeres mediante el método de inicialización aleatoria del clúster.

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

Entrena un modelo k-means con clústeres personalizados

En este ejemplo, crearás un modelo k-means con cuatro clústeres mediante el método de inicialización de clúster personalizado. init_col identifica la columna de tipo BOOL que contiene los valores que especifican si una fila específica es un centroide inicial. Esta columna solo debe contener tres filas con el 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`

Creación de modelos con TRANSFORM, sin incluir las columnas originales

La siguiente consulta entrena un modelo después de agregar las columnas f1 y f2 de la declaración SELECT para formar una nueva columna c; las columnas f1 y f2 se omiten de los datos de entrenamiento. El entrenamiento del modelo utiliza las columnas f3 y label_col como aparecen en la fuente de datos 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;