stochasticLinearRegression
Introduzido em: v20.1.0
Esta função implementa regressão linear estocástica. Ela oferece suporte a parâmetros personalizados para:
- taxa de aprendizado
- coeficiente de regularização L2
- tamanho do mini-batch
Ela também inclui alguns métodos para atualizar os pesos:
- SGD simples
- Adam (usado por padrão)
- Momentum
- Nesterov
Uso
A função é usada em duas etapas: ajustar o modelo e fazer previsões com novos dados.
- Ajuste
Para o ajuste, pode-se usar 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, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);
DROP TABLE IF EXISTS your_model;
CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, '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; ele depende apenas do número de argumentos passados para linearRegressionState.
Todos eles devem ser valores numéricos.
Observe que a coluna com o valor-alvo (que queremos aprender a prever) é inserida como o primeiro argumento.
- Predição
Após salvar um estado na tabela, podemos usá-lo várias vezes para predição ou até mesmo mesclá-lo com outros estados e criar modelos novos, ainda melhores.
CREATE TABLE IF NOT EXISTS test_data
(
x1 Float64,
x2 Float64
) ENGINE = Memory;
INSERT INTO test_data VALUES (10, 0), (20, 0);
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_dataA consulta retornará uma coluna de valores previstos.
Observe que o primeiro argumento de evalMLMethod é um objeto AggregateFunctionState; os demais são colunas de atributos.
test_data é uma tabela como train_data, mas pode não conter o valor-alvo.
Observações
- Para mesclar dois modelos, o usuário pode criar a seguinte consulta:
SELECT state1 + state2 FROM your_modelsonde a tabela your_models contém os dois modelos.
Esta consulta retornará um novo objeto AggregateFunctionState.
- Você pode recuperar os pesos do modelo criado para uso próprio sem salvar o modelo, se nenhum combinador
-Statefor usado.
SELECT stochasticLinearRegression(0.01)(target, x1, x2)
FROM train_dataUma consulta como esta ajustará o modelo e retornará seus pesos — os primeiros são os pesos, que correspondem aos parâmetros do modelo; o último é o viés. Assim, no exemplo acima, a consulta retornará uma coluna com 3 valores.
Sintaxe
stochasticLinearRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)Argumentos
learning_rate— O coeficiente do tamanho do passo quando é executada uma etapa de descida do gradiente. Uma taxa de aprendizado muito alta pode fazer com que os pesos do modelo se tornem infinitos. O padrão é0.00001.Float64l2_regularization_coef— Coeficiente de regularização L2, que pode ajudar a evitar sobreajuste. O padrão é0.1.Float64mini_batch_size— Define o número de elementos cujos 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 para atualizar os pesos:Adam(padrão),SGD,Momentum,Nesterov.MomentumeNesterovexigem um pouco mais de processamento e memória, mas acabam sendo úteis em termos de velocidade de convergência e estabilidade dos métodos de gradiente estocástico.const Stringtarget— Valor-alvo (variável dependente) que se deseja prever. Deve ser numérico.Float*x1, x2, ...— Valores das features (variáveis independentes). Todos devem ser numéricos.Float*
Valor retornado
Retorna os pesos do modelo de regressão linear treinado. Os primeiros valores correspondem aos parâmetros do modelo, e o último é o viés. Use evalMLMethod para fazer predições. Array(Float64)
Exemplos
Treinamento de 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, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);
DROP TABLE IF EXISTS your_model;
CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;
SELECT count() FROM your_model1Fazendo prediçõ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, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);
DROP TABLE IF EXISTS your_model;
CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, '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 (10, 0), (20, 0);
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) > 0 FROM test_data1
1Obtendo os pesos do 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, 0), (2, 2, 0), (3, 3, 0), (4, 4, 0), (5, 5, 0), (6, 6, 0);
SELECT length(stochasticLinearRegression(0.01)(target, x1, x2)) FROM train_data3Veja também