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:
- 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].
- 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_dataA 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.Float64l2_regularization_coef— Coeficiente de regularização L2, que pode ajudar a evitar overfitting. O padrão é0.1.Float64mini_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.UInt64method— Método de atualização dos pesos:Adam(padrão),SGD,Momentum,Nesterov.MomentumeNesterovexigem 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.Stringtarget— Rótulos-alvo da classificação binária. Devem estar no intervalo [-1, 1].Floatx1, 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_model1Fazendo 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_data1
1Classificaçã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
0Veja também