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

> Эта функция реализует стохастическую логистическую регрессию. Её можно использовать для задач бинарной классификации, она поддерживает те же пользовательские параметры, что и stochasticLinearRegression, и работает аналогично.

# stochasticLogisticRegression

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

Добавленный в: v20.1.0

Эта функция реализует стохастическую логистическую регрессию.
Её можно использовать для задачи бинарной классификации; она поддерживает те же пользовательские параметры, что и [`stochasticLinearRegression`](/ru/reference/functions/aggregate-functions/stochasticLinearRegression), и работает так же.

**Использование**

Функция используется в два этапа:

1. Обучение

Для обучения можно использовать такой запрос:

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

Здесь нам также нужно вставить данные в таблицу `train_data`.
Количество параметров не фиксировано: оно зависит только от числа аргументов, переданных в `logisticRegressionState`.
Все они должны быть числовыми значениями.
Обратите внимание, что столбец с целевым значением (которое мы хотим научиться предсказывать) передаётся как первый аргумент.

Предсказанные метки должны находиться в диапазоне \[-1, 1].

2. Предсказание

Используя сохранённое состояние, можно предсказать вероятность того, что объект имеет метку `1`.

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

Запрос вернет столбец вероятностей.
Обратите внимание, что первый аргумент `evalMLMethod` — это объект `AggregateFunctionState`, а далее идут столбцы признаков.

Мы также можем задать порог вероятности, который относит элементы к разным меткам.

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

В результате будут получены метки.

`test_data` — это таблица, как и `train_data`, но она может не содержать целевое значение.

**Синтаксис**

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

**Аргументы**

* `learning_rate` — Коэффициент длины шага при выполнении шага градиентного спуска. Слишком высокая скорость обучения может привести к бесконечным значениям весов модели. Значение по умолчанию — `0.00001`. [`Float64`](/ru/reference/data-types/float)
* `l2_regularization_coef` — Коэффициент L2-регуляризации, который может помочь предотвратить переобучение. Значение по умолчанию — `0.1`. [`Float64`](/ru/reference/data-types/float)
* `mini_batch_size` — Задаёт количество элементов, для которых вычисляются и суммируются градиенты для выполнения одного шага градиентного спуска. При чистом стохастическом спуске используется один элемент, однако небольшие батчи (около 10 элементов) делают шаги градиентного спуска более стабильными. Значение по умолчанию — `15`. [`UInt64`](/ru/reference/data-types/int-uint)
* `method` — Метод обновления весов: `Adam` (по умолчанию), `SGD`, `Momentum`, `Nesterov`. `Momentum` и `Nesterov` требуют немного больше вычислений и памяти, однако могут быть полезны с точки зрения скорости сходимости и стабильности методов стохастического градиента. [`String`](/ru/reference/data-types/string)
* `target` — Целевые метки бинарной классификации. Должны находиться в диапазоне \[-1, 1]. [`Float`](/ru/reference/data-types/float)
* `x1, x2, ...` — Значения признаков (независимые переменные). Все должны быть числовыми. [`Float`](/ru/reference/data-types/float)

**Возвращаемое значение**

Возвращает веса обученной модели логистической регрессии. Для прогнозирования используйте `evalMLMethod`, который возвращает вероятности того, что объект имеет метку `1`. [`Array(Float64)`](/ru/reference/data-types/array)

**Примеры**

**Обучение модели**

```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}
Сохраняет состояние обученной модели в таблицу
```

**Получение прогнозов**

```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}
Возвращает значения вероятностей для тестовых данных
```

**Классификация с пороговым значением**

```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}
Возвращает метки бинарной классификации с использованием порогового значения вероятности
```

**См. также**

* [stochasticLinearRegression](/ru/reference/functions/aggregate-functions/stochasticLogisticRegression)
* [Различия между линейной и логистической регрессией.](https://stackoverflow.com/questions/12146914/what-is-the-difference-between-linear-regression-and-logistic-regression)
