Sentencia CREATE MODEL
Usa la sentencia 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_CLASSIFIER' | 'AUTOML_REGRESSOR' | '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 no ML 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' | 'TENSORFLOW' |
'MATRIX_FACTORIZATION' | 'AUTOML_REGRESSOR' | 'AUTOML_CLASSIFIER' |
'BOOSTED_TREE_CLASSIFIER' | 'BOOSTED_TREE_REGRESSOR' | 'DNN_CLASSIFIER' |
'DNN_REGRESSOR' | 'ARIMA' }
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 la capacitación del modelo 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 sentencia 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 sentencia CREATE MODEL para modelos de factorización de matrices.
'AUTOML_REGRESSOR'
(beta): crea un modelo de regresión mediante AutoML Tables. Consulta la sentencia 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 sentencia 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 sentencia 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 sentencia 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 sentencia 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 sentencia CREATE MODEL para modelos de DNN a fin de obtener más información.
'ARIMA'
: Modelo de serie temporal basado en ARIMA de una variable 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
owarm_start
, se utiliza la estrategiabatch_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
, BIGNUMERIC
(vista previa), 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 tipoBOOL
. Las filas con valoresTRUE
oNULL
se usan como datos de evaluación. Las filas con valoresFALSE
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 paraDATA_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 sentencia 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 todas las clases, configura AUTO_CLASS_WEIGHTS
como TRUE
. Para lograr el saldo, se utiliza 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
:
'COSINE'
: usa la siguiente ecuación para calcular la distancia:
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 bucket de Google Cloud Storage que contiene el modelo para importar.
Consulta la sentencia 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 sentencia 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:
'GBTREE'
: booster de TREE'DART'
: booster de DART
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 booster de TREE.
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:
'RELU'
: Lineal rectificada'RELU6'
: Lineal rectificada 6'CRELU'
: ReLU concatenada'ELU'
: Lineal exponencial'SELU'
: Lineal exponencial escalada'SIGMOID'
: Activación sigmoidea'TANH'
: Activación de Tanh
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:
'ADAGRAD'
: Implementa el algoritmo Adagrad'ADAM'
: Implementa el algoritmo Adam'FTRL'
: Implementa el algoritmo FTRL'RMSPROP'
: Implementa el algoritmo RMSProp'SGD'
: Implementa el algoritmo de descenso de gradientes
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 candidatos que se evaluarán si se determina que las d no estacional es igual a 0 o 2. Si se determina que d no estacional es igual a 1, se duplicará la cantidad de modelos candidatos que se evaluarán, ya que hay un término de desvío adicional que se debe considerar para todos los modelos candidatos existentes. Esta opción se inhabilita 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 usa 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 BIGNUMERIC ( Preview) 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 BIGNUMERIC ( Preview) 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 valoresNULL
, 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 BIGNUMERIC ( Preview) 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;