Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

stochasticLinearRegression

stochasticLinearRegression

Introduit dans : v20.1.0

Cette fonction implémente une régression linéaire stochastique. Elle prend en charge des paramètres personnalisés pour :

  • taux d’apprentissage
  • coefficient de régularisation L2
  • taille des mini-lots

Elle propose également plusieurs méthodes de mise à jour des poids :

  • Adam (utilisée par défaut)
  • SGD simple
  • Momentum
  • Nesterov

Utilisation

La fonction s’utilise en deux étapes : l’entraînement du modèle, puis la prédiction sur de nouvelles données.

  1. Entraînement

Pour l’entraînement, vous pouvez utiliser une requête comme celle-ci :

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;

Ici, nous devons également insérer des données dans la table train_data. Le nombre de paramètres n’est pas fixe ; il dépend uniquement du nombre d’arguments passés à linearRegressionState. Ils doivent tous être des valeurs numériques. Notez que la colonne contenant la valeur cible (que nous voulons apprendre à prédire) est insérée en tant que premier argument.

  1. Prédiction

Après avoir enregistré un état dans la table, nous pouvons l’utiliser plusieurs fois pour effectuer des prédictions, ou même le fusionner avec d’autres états afin de créer de nouveaux modèles encore meilleurs.

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_data

La requête renverra une colonne de valeurs prédites. Notez que le premier argument de evalMLMethod est un objet AggregateFunctionState ; les suivants sont des colonnes de caractéristiques.

test_data est une table similaire à train_data, mais peut ne pas contenir la valeur cible.

Remarques

  1. Pour fusionner deux modèles, l'utilisateur peut créer la requête suivante :
SELECT state1 + state2 FROM your_models

où la table your_models contient les deux modèles. Cette requête renverra un nouvel objet AggregateFunctionState.

  1. Vous pouvez récupérer les poids du modèle créé pour vos propres usages sans enregistrer le modèle si aucun combinateur -State n’est utilisé.
SELECT stochasticLinearRegression(0.01)(target, x1, x2)
FROM train_data

Une requête comme celle-ci ajuste le modèle et renvoie ses poids : les premiers sont les poids, qui correspondent aux paramètres du modèle, et le dernier est le biais. Ainsi, dans l'exemple ci-dessus, la requête renverra une colonne contenant 3 valeurs.

Syntaxe

stochasticLinearRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)

Arguments

  • learning_rate — Coefficient de longueur de pas lors de l’exécution d’une étape de descente de gradient. Un taux d’apprentissage trop élevé peut entraîner des poids infinis pour le modèle. La valeur par défaut est 0.00001. Float64
  • l2_regularization_coef — Coefficient de régularisation L2, qui peut aider à éviter le surapprentissage. La valeur par défaut est 0.1. Float64
  • mini_batch_size — Définit le nombre d’éléments pour lesquels les gradients sont calculés puis additionnés afin d’effectuer une étape de descente de gradient. La descente purement stochastique utilise un seul élément, mais de petits batches (environ 10 éléments) rendent les étapes de gradient plus stables. La valeur par défaut est 15. UInt64
  • method — Méthode de mise à jour des poids : Adam (par défaut), SGD, Momentum, Nesterov. Momentum et Nesterov nécessitent légèrement plus de calculs et de mémoire, mais ils sont utiles en termes de vitesse de convergence et de stabilité des méthodes de gradient stochastique. const String
  • target — Valeur cible (variable dépendante) à apprendre à prédire. Doit être numérique. Float*
  • x1, x2, ... — Valeurs des caractéristiques (variables indépendantes). Elles doivent toutes être numériques. Float*

Valeur renvoyée

Renvoie les poids du modèle de régression linéaire entraîné. Les premières valeurs correspondent aux paramètres du modèle, la dernière au biais. Utilisez evalMLMethod pour effectuer des prédictions. Array(Float64)

Exemples

Entraînement d’un modèle

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

Effectuer des prédictions

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

Obtention des poids du modèle

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

Voir aussi

Navigation