stochasticLinearRegression
Функция реализует стохастическую линейную регрессию. Поддерживает пользовательские параметры для скорости обучения, коэффициента регуляризации L2, размера mini-batch и имеет несколько методов обновления весов (Adam (по умолчанию), simple SGD, Momentum, Nesterov).
Параметры
Есть 4 настраиваемых параметра. Они передаются в функцию последовательно, однако не обязательно указывать все, используются значения по умолчанию, однако хорошая модель требует некоторой настройки параметров.
stochasticLinearRegression(1.0, 1.0, 10, 'SGD')
- Скорость обучения — коэффициент длины шага, при выполнении градиентного спуска. Слишком большая скорость обучения может привести к бесконечным весам модели. По умолчанию
0.00001
. - Коэффициент регуляризации l2. Помогает предотвратить подгонку. По умолчанию
0.1
. - Размер mini-batch задаёт количество элементов, чьи градиенты будут вычислены и просуммированы при выполнении одного шага градиентного спуска. Чистый стохастический спуск использует один элемент, однако использование mini-batch (около 10 элементов) делает градиентные шаги более стабильными. По умолчанию
15
. - Метод обновления весов, можно выбрать один из следующих:
Adam
(по умолчанию),SGD
,Momentum
,Nesterov
.Momentum
иNesterov
более требовательные к вычислительным ресурсам и памяти, однако они имеют высокую скорость схождения и устойчивости методов стохастического градиента.
Использование
stochasticLinearRegression
используется на двух этапах: построение модели и предсказание новых данных. Чтобы построить модель и сохранить её состояние для дальнейшего использования, мы используем комбинатор -State
.
Для прогнозирования мы используем функцию evalMLMethod, которая принимает в качестве аргументов состояние и свойства для прогнозирования.
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, param1, param2)
AS state FROM train_data;
Здесь нам также нужно вставить данные в таблицу train_data
. Количество параметров не фиксировано, оно зависит только от количества аргументов, перешедших в linearRegressionState
. Все они должны быть числовыми значениями.
Обратите внимание, что столбец с целевым значением (которое мы хотели бы научиться предсказывать) вставляется в качестве первого аргумента.
2. Прогнозирование
После сохранения состояния в таблице мы можем использовать его несколько раз для прогнозирования или смёржить с другими состояниями и создать новые, улучшенные модели.
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) FROM test_data
Запрос возвращает столбец прогнозируемых значений. Обратите внимание, что первый аргумент evalMLMethod
это объект AggregateFunctionState
, далее идут столбцы свойств.
test_data
— это таблица, подобная train_data
, но при этом может не содержать целевое значение.
Примечания
- Объединить две модели можно следующим запросом:
SELECT state1 + state2 FROM your_models
где таблица your_models
содержит обе модели. Запрос вернёт новый объект AggregateFunctionState
.
- Пользователь может получать веса созданной модели для своих целей без сохранения модели, если не использовать комбинатор
-State
.
SELECT stochasticLinearRegression(0.01)(target, param1, param2) FROM train_data
Подобный запрос строит модель и возвращает её веса, отвечающие параметрам моделей и смещение. Таким образом, в приведенном выше примере запрос вернет столбец с тремя значениями.
Смотрите также