Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

stochasticLogisticRegression

stochasticLogisticRegression

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 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:

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;

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

  1. Predição

Usando o estado salvo, podemos prever a probabilidade de um objeto ter o rótulo 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

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.

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)

Então, o resultado serão rótulos.

test_data é uma tabela como train_data, mas pode não conter o valor alvo.

Sintaxe

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
  • l2_regularization_coef — Coeficiente de regularização L2, que pode ajudar a evitar overfitting. O padrão é 0.1. Float64
  • 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
  • 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
  • target — Rótulos-alvo da classificação binária. Devem estar no intervalo [-1, 1]. Float
  • x1, x2, ... — Valores das características (variáveis independentes). Todos devem ser numéricos. 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)

Exemplos

Treinando um modelo

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_model
1

Fazendo previsões

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_data
1
1

Classificação com limiar

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

Veja também

Navigation