> ## 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 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`](/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
(
    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;
```

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}
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) 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, param1, param2) 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`](/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`](/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`](/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`](/pt-BR/reference/data-types/string)
* `target` — Rótulos-alvo da classificação binária. Devem estar no intervalo \[-1, 1]. [`Float`](/pt-BR/reference/data-types/float)
* `x1, x2, ...` — Valores das características (variáveis independentes). Todos devem ser numéricos. [`Float`](/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)`](/pt-BR/reference/data-types/array)

**Exemplos**

**Treinando um 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}
Salva o estado do modelo treinado na tabela
```

**Fazendo previsões**

```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}
Retorna valores de probabilidade para os dados de teste
```

**Classificação por limiar**

```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}
Retorna rótulos de classificação binária usando limiar de probabilidade
```

**Veja também**

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