> ## 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 la regresión logística estocástica. Puede usarse para problemas de clasificación binaria, admite los mismos parámetros personalizados que stochasticLinearRegression y funciona de la misma forma.

# stochasticLogisticRegression

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

Introducido en: v20.1.0

Esta función implementa la regresión logística estocástica.
Puede utilizarse para problemas de clasificación binaria, admite los mismos parámetros personalizados que [`stochasticLinearRegression`](/es/reference/functions/aggregate-functions/stochasticLinearRegression) y funciona de la misma manera.

**Uso**

La función se utiliza en dos pasos:

1. Entrenamiento

Para el entrenamiento, 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
stochasticLogisticRegression(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;
```

Aquí también necesitamos insertar datos en la tabla `train_data`.
El número de parámetros no es fijo; depende únicamente del número de argumentos pasados a `logisticRegressionState`.
Todos deben ser valores numéricos.
Ten en cuenta que la columna con el valor objetivo (que queremos aprender a predecir) se inserta como primer argumento.

Las etiquetas predichas deben estar en \[-1, 1].

2. Predicción

Usando el estado guardado, podemos predecir la probabilidad de que un objeto tenga la etiqueta `1`.

```sql theme={null}
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) FROM test_data
```

La consulta devolverá una columna de probabilidades.
Tenga en cuenta que el primer argumento de `evalMLMethod` es un objeto `AggregateFunctionState`, y a continuación van columnas de características.

También podemos establecer un umbral de probabilidad, que asigna elementos a distintas etiquetas.

```sql theme={null}
SELECT result < 1.1 AND result > 0.5 FROM
(WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) AS result FROM test_data)
```

Entonces, el resultado serán etiquetas.

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

**Sintaxis**

```sql theme={null}
stochasticLogisticRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)
```

**Argumentos**

* `learning_rate` — Coeficiente de la longitud del paso cuando se realiza un paso de descenso de gradiente. Una tasa de aprendizaje demasiado alta puede producir pesos infinitos en el modelo. 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 de gradiente. El descenso puramente estocástico usa un solo elemento; sin embargo, usar lotes pequeños (de unos 10 elementos) hace que los pasos de 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, resultan útiles en cuanto a velocidad de convergencia y estabilidad de los métodos de gradiente estocástico. [`String`](/es/reference/data-types/string)
* `target` — Etiquetas objetivo de clasificación binaria. Deben estar en el intervalo \[-1, 1]. [`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 del modelo de regresión logística entrenado. Use `evalMLMethod` para hacer predicciones; devuelve probabilidades de que el objeto tenga la etiqueta `1`. [`Array(Float64)`](/es/reference/data-types/array)

**Ejemplos**

**Entrenamiento de un modelo**

```sql title=Query theme={null}
CREATE TABLE your_model
ENGINE = MergeTree
ORDER BY tuple()
AS SELECT
stochasticLogisticRegressionState(1.0, 1.0, 10, '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 valores de probabilidad para los datos de prueba
```

**Clasificación con umbral**

```sql title=Query theme={null}
SELECT result < 1.1 AND result > 0.5
FROM (
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) AS result FROM test_data)
```

```response title=Response theme={null}
Devuelve etiquetas de clasificación binaria usando un umbral de probabilidad
```

**Vea también**

* [stochasticLinearRegression](/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)
