> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/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`](/docs/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
(
    target Float64,
    x1 Float64,
    x2 Float64
) ENGINE = Memory;

INSERT INTO train_data VALUES (-1, 1, 1), (-1, 2, 1), (-1, 3, 2), (1, 8, 9), (1, 9, 8), (1, 10, 10);

CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLogisticRegressionState(1.0, 1.0, 10, '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}
CREATE TABLE IF NOT EXISTS test_data
(
    x1 Float64,
    x2 Float64
) ENGINE = Memory;

INSERT INTO test_data VALUES (1, 1), (9, 9);

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) 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, x1, x2) 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`](/docs/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`](/docs/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`](/docs/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`](/docs/es/reference/data-types/string)
* `target` — Etiquetas objetivo de clasificación binaria. Deben estar en el intervalo \[-1, 1]. [`Float`](/docs/es/reference/data-types/float)
* `x1, x2, ...` — Valores de las características (variables independientes). Todos deben ser numéricos. [`Float`](/docs/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)`](/docs/es/reference/data-types/array)

**Ejemplos**

**Entrenamiento de un modelo**

```sql title=Query theme={null}
CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (-1, 1, 1), (-1, 2, 1), (-1, 3, 2), (1, 8, 9), (1, 9, 8), (1, 10, 10);

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;

SELECT count() FROM your_model
```

```response title=Response theme={null}
1
```

**Hacer predicciones**

```sql title=Query theme={null}
CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (-1, 1, 1), (-1, 2, 1), (-1, 3, 2), (1, 8, 9), (1, 9, 8), (1, 10, 10);

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;

CREATE TABLE test_data (x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO test_data VALUES (1, 1), (9, 9);

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

```response title=Response theme={null}
1
1
```

**Clasificación con umbral**

```sql title=Query theme={null}
CREATE TABLE train_data (target Float64, x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO train_data VALUES (-1, 1, 1), (-1, 2, 1), (-1, 3, 2), (1, 8, 9), (1, 9, 8), (1, 10, 10);

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;

CREATE TABLE test_data (x1 Float64, x2 Float64) ENGINE = Memory;
INSERT INTO test_data VALUES (1, 1), (9, 9);

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}
0
0
```

**Véase también**

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