Перейти к основному содержимому
Перейти к основному содержимому

stochasticLinearRegression

stochasticLinearRegression

Появилась в версии v20.1

Эта функция реализует стохастическую линейную регрессию. Она поддерживает настраиваемые параметры:

  • скорость обучения
  • коэффициент L2-регуляризации
  • размер мини-батча

Также доступны несколько методов обновления весов:

  • Adam (используется по умолчанию)
  • простой SGD
  • Momentum
  • Nesterov

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

Функция используется в два шага: обучение модели и предсказание на новых данных.

  1. Обучение

Для обучения можно использовать запрос следующего вида:

CREATE TABLE IF NOT EXISTS train_data
(
    param1 Float64,
    param2 Float64,
    target Float64
) ENGINE = Memory;

CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;

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

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

После сохранения состояния в таблицу мы можем использовать его многократно для предсказания или даже объединять с другими состояниями и создавать новые, еще более качественные модели.

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data

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

test_data — это такая же таблица, как train_data, но в ней может не быть целевого значения.

Примечания

  1. Чтобы объединить две модели, можно создать такой запрос:
SELECT state1 + state2 FROM your_models

где таблица your_models содержит обе модели. Этот запрос вернёт новый объект AggregateFunctionState.

  1. Вы можете получить веса созданной модели для собственных целей без сохранения модели, если не используется комбинатор -State.
SELECT stochasticLinearRegression(0.01)(target, param1, param2)
FROM train_data

Такой запрос обучит модель и вернет ее веса — сначала идут веса, которые соответствуют параметрам модели, последний — это свободный член (bias). Таким образом, в приведенном выше примере запрос вернет столбец с 3 значениями.

Синтаксис

stochasticLinearRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)

Аргументы

  • learning_rate — Коэффициент, определяющий длину шага при выполнении шага градиентного спуска. Слишком большое значение learning rate может привести к бесконечным значениям весов модели. Значение по умолчанию — 0.00001. Float64
  • l2_regularization_coef — Коэффициент L2-регуляризации, который может помочь предотвратить переобучение. Значение по умолчанию — 0.1. Float64
  • mini_batch_size — Задаёт количество элементов, по которым будут вычислены и суммированы градиенты для выполнения одного шага градиентного спуска. Классический стохастический спуск использует один элемент, однако небольшие батчи (около 10 элементов) делают шаги по градиенту более стабильными. Значение по умолчанию — 15. UInt64
  • method — Метод обновления весов: Adam (по умолчанию), SGD, Momentum, Nesterov. Momentum и Nesterov требуют немного больше вычислений и памяти, но могут быть полезны с точки зрения скорости сходимости и устойчивости стохастических градиентных методов. const String
  • target — Целевое значение (зависимая переменная), которое нужно научиться предсказывать. Должно быть числовым. Float*
  • x1, x2, ... — Значения признаков (независимые переменные). Все должны быть числовыми. Float*

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

Возвращает обученные веса модели линейной регрессии. Первые значения соответствуют параметрам модели, последнее — смещение (bias). Используйте evalMLMethod для предсказаний. Array(Float64)

Примеры

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

CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data
Saves trained model state to table

Прогнозирование

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data
Returns predicted values for test data

Извлечение весов модели

SELECT stochasticLinearRegression(0.01)(target, x1, x2) FROM train_data
Returns model weights without saving state

См. также