> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Esta función implementa una regresión lineal estocástica. Admite parámetros personalizados para la tasa de aprendizaje, el coeficiente de regularización L2, el tamaño del mini-batch y ofrece varios métodos para actualizar los pesos (Adam, SGD simple, Momentum, Nesterov).

# stochasticLinearRegression

<div id="stochasticLinearRegression">
  ## stochasticLinearRegression
</div>

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:

```sql theme={null}
CREATE TABLE IF NOT EXISTS train_data
(
    param1 Float64,
    param2 Float64,
    target Float64
) ENGINE = Memory;

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.

2. 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.

```sql theme={null}
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:

```sq; theme={null}
SELECT state1 + state2 FROM your_models
```

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

2. Puede recuperar los pesos del modelo creado para utilizarlos sin guardar el modelo, si no se usa el combinador `-State`.

```sql theme={null}
SELECT stochasticLinearRegression(0.01)(target, param1, param2)
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**

```sql theme={null}
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`](/es/reference/data-types/float)
* `l2_regularization_coef` — Coeficiente de regularización L2 que puede ayudar a evitar el sobreajuste. El valor predeterminado es `0.1`. [`Float64`](/es/reference/data-types/float)
* `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`](/es/reference/data-types/int-uint)
* `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`](/es/reference/data-types/string)
* `target` — Valor objetivo (variable dependiente) que se va a aprender a predecir. Debe ser numérico. [`Float*`](/es/reference/data-types/float)
* `x1, x2, ...` — Valores de las características (variables independientes). Todos deben ser numéricos. [`Float*`](/es/reference/data-types/float)

**Valor devuelto**

Devuelve los pesos entrenados del modelo de regresión lineal. Los primeros valores corresponden a los parámetros del modelo; el último es el sesgo. Use `evalMLMethod` para realizar predicciones. [`Array(Float64)`](/es/reference/data-types/array)

**Ejemplos**

**Entrenamiento de un modelo**

```sql title=Query theme={null}
CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data
```

```response title=Response theme={null}
Guarda el estado del modelo entrenado en la tabla
```

**Realizar predicciones**

```sql title=Query theme={null}
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data
```

```response title=Response theme={null}
Devuelve los valores predichos para los datos de prueba
```

**Obtener los pesos del modelo**

```sql title=Query theme={null}
SELECT stochasticLinearRegression(0.01)(target, x1, x2) FROM train_data
```

```response title=Response theme={null}
Devuelve los pesos del modelo sin guardar el estado
```

**Véase también**

* [stochasticLogisticRegression](/es/reference/functions/aggregate-functions/stochasticLogisticRegression)
* [Diferencia entre la regresión lineal y la regresión logística](https://stackoverflow.com/questions/12146914/what-is-the-difference-between-linear-regression-and-logistic-regression)
