Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

stochasticLinearRegression

stochasticLinearRegression

Introducido en: v20.1.0

Esta función implementa la regresión lineal estocástica. Admite parámetros personalizados para:

  • tasa de aprendizaje
  • coeficiente de regularización L2
  • tamaño del mini-batch

También incluye algunos métodos para actualizar los pesos:

  • Adam (usado de forma predeterminada)
  • SGD simple
  • Momentum
  • Nesterov

Uso

La función se utiliza en dos pasos: ajustar el modelo y hacer predicciones con datos nuevos.

  1. Ajuste

Para ajustar, se puede usar una consulta como esta:

CREATE TABLE IF NOT EXISTS train_data
(
    target Float64,
    x1 Float64,
    x2 Float64
) ENGINE = Memory;

INSERT INTO train_data VALUES (1, 1, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);

DROP TABLE IF EXISTS your_model;

CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;

Aquí también debemos insertar datos en la tabla train_data. El número de parámetros no es fijo; depende únicamente de la cantidad de argumentos que se pasan a linearRegressionState. Todos deben ser valores numéricos. Tenga en cuenta que la columna con el valor objetivo (que queremos aprender a predecir) se pasa como primer argumento.

  1. Predicción

Después de guardar un estado en la tabla, podemos usarlo varias veces para hacer predicciones o incluso fusionarlo con otros estados y crear modelos nuevos, aún mejores.

CREATE TABLE IF NOT EXISTS test_data
(
    x1 Float64,
    x2 Float64
) ENGINE = Memory;

INSERT INTO test_data VALUES (10, 0), (20, 0);

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data

La consulta devolverá una columna de valores predichos. Tenga en cuenta que el primer argumento de evalMLMethod es un objeto AggregateFunctionState; los siguientes son las columnas de características.

test_data es una tabla como train_data, pero puede no contener el valor objetivo.

Notas

  1. Para fusionar dos modelos, el usuario puede crear una consulta como esta:
SELECT state1 + state2 FROM your_models

donde la tabla your_models contiene ambos modelos. Esta consulta devolverá un nuevo objeto AggregateFunctionState.

  1. Puede recuperar los pesos del modelo creado para utilizarlos sin guardar el modelo, si no se usa el combinador -State.
SELECT stochasticLinearRegression(0.01)(target, x1, x2)
FROM train_data

Una consulta como esta ajustará el modelo y devolverá sus pesos: primero aparecen los pesos, que corresponden a los parámetros del modelo, y el último valor es el sesgo. Así, en el ejemplo anterior, la consulta devolverá una columna con 3 valores.

Sintaxis

stochasticLinearRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)

Argumentos

  • learning_rate — Coeficiente de la longitud del paso cuando se ejecuta un paso de descenso por gradiente. Una tasa de aprendizaje demasiado alta puede hacer que el modelo tenga pesos infinitos. El valor predeterminado es 0.00001. Float64
  • l2_regularization_coef — Coeficiente de regularización L2 que puede ayudar a evitar el sobreajuste. El valor predeterminado es 0.1. Float64
  • mini_batch_size — Establece el número de elementos para los que se calcularán y sumarán los gradientes a fin de realizar un paso de descenso por gradiente. El descenso estocástico puro usa un solo elemento; sin embargo, usar lotes pequeños (de unos 10 elementos) hace que los pasos del gradiente sean más estables. El valor predeterminado es 15. UInt64
  • method — Método para actualizar los pesos: Adam (predeterminado), SGD, Momentum, Nesterov. Momentum y Nesterov requieren algo más de cálculo y memoria; sin embargo, son útiles en términos de velocidad de convergencia y estabilidad de los métodos de gradiente estocástico. const String
  • target — Valor objetivo (variable dependiente) que se va a aprender a predecir. Debe ser numérico. Float*
  • x1, x2, ... — Valores de las características (variables independientes). Todos deben ser numéricos. Float*

Valor devuelto

Devuelve los pesos del modelo de regresión lineal entrenado. Los primeros valores corresponden a los parámetros del modelo; el último es el sesgo. Utilice evalMLMethod para realizar predicciones. Array(Float64)

Ejemplos

Entrenamiento de un modelo

DROP TABLE IF EXISTS train_data;

CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (1, 1, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);

DROP TABLE IF EXISTS your_model;

CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;

SELECT count() FROM your_model
1

Realizar predicciones

DROP TABLE IF EXISTS train_data;

CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (1, 1, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);

DROP TABLE IF EXISTS your_model;

CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;

DROP TABLE IF EXISTS test_data;

CREATE TABLE test_data (x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO test_data VALUES (10, 0), (20, 0);

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) > 0 FROM test_data
1
1

Obtención de los pesos del modelo

DROP TABLE IF EXISTS train_data;

CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (1, 1, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);

SELECT length(stochasticLinearRegression(0.01)(target, x1, x2)) FROM train_data
3

Véase también

Navigation