stochasticLogisticRegression
Добавленный в: v20.1.0
Эта функция реализует стохастическую логистическую регрессию.
Её можно использовать для задачи бинарной классификации; она поддерживает те же пользовательские параметры, что и stochasticLinearRegression, и работает так же.
Использование
Функция используется в два этапа:
- Обучение
Для обучения можно использовать такой запрос:
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);
DROP TABLE IF EXISTS your_model;
CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLogisticRegressionState(1.0, 1.0, 10, 'SGD')(target, x1, x2)
AS state FROM train_data;Здесь нам также нужно вставить данные в таблицу train_data.
Количество параметров не фиксировано: оно зависит только от числа аргументов, переданных в logisticRegressionState.
Все они должны быть числовыми значениями.
Обратите внимание, что столбец с целевым значением (которое мы хотим научиться предсказывать) передаётся как первый аргумент.
Предсказанные метки должны находиться в диапазоне [-1, 1].
- Предсказание
Используя сохранённое состояние, можно предсказать вероятность того, что объект имеет метку 1.
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Запрос вернет столбец вероятностей.
Обратите внимание, что первый аргумент evalMLMethod — это объект AggregateFunctionState, а далее идут столбцы признаков.
Мы также можем задать порог вероятности, который относит элементы к разным меткам.
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)В результате будут получены метки.
test_data — это таблица, как и train_data, но она может не содержать целевое значение.
Синтаксис
stochasticLogisticRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)Аргументы
learning_rate— Коэффициент длины шага при выполнении шага градиентного спуска. Слишком высокая скорость обучения может привести к бесконечным значениям весов модели. Значение по умолчанию —0.00001.Float64l2_regularization_coef— Коэффициент L2-регуляризации, который может помочь предотвратить переобучение. Значение по умолчанию —0.1.Float64mini_batch_size— Задаёт количество элементов, для которых вычисляются и суммируются градиенты для выполнения одного шага градиентного спуска. При чистом стохастическом спуске используется один элемент, однако небольшие батчи (около 10 элементов) делают шаги градиентного спуска более стабильными. Значение по умолчанию —15.UInt64method— Метод обновления весов:Adam(по умолчанию),SGD,Momentum,Nesterov.MomentumиNesterovтребуют немного больше вычислений и памяти, однако могут быть полезны с точки зрения скорости сходимости и стабильности методов стохастического градиента.Stringtarget— Целевые метки бинарной классификации. Должны находиться в диапазоне [-1, 1].Floatx1, x2, ...— Значения признаков (независимые переменные). Все должны быть числовыми.Float
Возвращаемое значение
Возвращает веса обученной модели логистической регрессии. Для прогнозирования используйте evalMLMethod, который возвращает вероятности того, что объект имеет метку 1. Array(Float64)
Примеры
Обучение модели
DROP TABLE IF EXISTS train_data;
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);
DROP TABLE IF EXISTS your_model;
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_model1Получение прогнозов
DROP TABLE IF EXISTS train_data;
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);
DROP TABLE IF EXISTS your_model;
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;
DROP TABLE IF EXISTS test_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_data1
1Классификация по пороговому значению
DROP TABLE IF EXISTS train_data;
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);
DROP TABLE IF EXISTS your_model;
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;
DROP TABLE IF EXISTS test_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)0
0См. также