> ## 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 função implementa regressão logística estocástica. Ela pode ser usada para problemas de classificação binária, aceita os mesmos parâmetros personalizados que stochasticLinearRegression e funciona da mesma forma.

# stochasticLogisticRegression

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

Introduzido na versão: v20.1.0

Esta função implementa regressão logística estocástica.
Ela pode ser usada para problemas de classificação binária, oferece suporte aos mesmos parâmetros personalizados que [`stochasticLinearRegression`](/docs/pt-BR/reference/functions/aggregate-functions/stochasticLinearRegression) e funciona da mesma forma.

**Uso**

A função é usada em duas etapas:

1. Treinamento

Para o treinamento, pode ser usada uma 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;
```

Aqui, também precisamos inserir dados na tabela `train_data`.
O número de parâmetros não é fixo; depende apenas do número de argumentos passados para `logisticRegressionState`.
Todos eles devem ser valores numéricos.
Observe que a coluna com o valor-alvo (que queremos aprender a prever) deve ser inserida como o primeiro argumento.

Os rótulos previstos devem estar em \[-1, 1].

2. Predição

Usando o estado salvo, podemos prever a probabilidade de um objeto ter o rótulo `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
```

A consulta retornará uma coluna de probabilidades.
Observe que o primeiro argumento de `evalMLMethod` é um objeto `AggregateFunctionState`; os seguintes são colunas de características.

Também podemos definir um limite de probabilidade, que atribui elementos a rótulos diferentes.

```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)
```

Então, o resultado serão rótulos.

`test_data` é uma tabela como `train_data`, mas pode não conter o valor alvo.

**Sintaxe**

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

**Argumentos**

* `learning_rate` — Coeficiente do tamanho do passo quando um passo de descida do gradiente é executado. Uma taxa de aprendizado muito alta pode causar pesos infinitos no modelo. O padrão é `0.00001`. [`Float64`](/docs/pt-BR/reference/data-types/float)
* `l2_regularization_coef` — Coeficiente de regularização L2, que pode ajudar a evitar overfitting. O padrão é `0.1`. [`Float64`](/docs/pt-BR/reference/data-types/float)
* `mini_batch_size` — Define o número de elementos para os quais os gradientes serão calculados e somados para executar um passo de descida do gradiente. A descida estocástica pura usa um único elemento; no entanto, usar batches pequenos (cerca de 10 elementos) torna os passos do gradiente mais estáveis. O padrão é `15`. [`UInt64`](/docs/pt-BR/reference/data-types/int-uint)
* `method` — Método de atualização dos pesos: `Adam` (padrão), `SGD`, `Momentum`, `Nesterov`. `Momentum` e `Nesterov` exigem um pouco mais de computação e memória; no entanto, podem ser úteis em termos de velocidade de convergência e estabilidade dos métodos de gradiente estocástico. [`String`](/docs/pt-BR/reference/data-types/string)
* `target` — Rótulos-alvo da classificação binária. Devem estar no intervalo \[-1, 1]. [`Float`](/docs/pt-BR/reference/data-types/float)
* `x1, x2, ...` — Valores das características (variáveis independentes). Todos devem ser numéricos. [`Float`](/docs/pt-BR/reference/data-types/float)

**Valor retornado**

Retorna os pesos treinados do modelo de regressão logística. Use `evalMLMethod` para fazer previsões, que retorna probabilidades de um objeto ter o rótulo `1`. [`Array(Float64)`](/docs/pt-BR/reference/data-types/array)

**Exemplos**

**Treinando um 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
```

**Fazendo previsões**

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

**Classificação com limiar**

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

**Veja também**

* [stochasticLinearRegression](/docs/pt-BR/reference/functions/aggregate-functions/stochasticLogisticRegression)
* [Diferença entre regressão linear e regressão logística.](https://stackoverflow.com/questions/12146914/what-is-the-difference-between-linear-regression-and-logistic-regression)
