Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

stochasticLogisticRegression

stochasticLogisticRegression

Introduit dans : v20.1.0

Cette fonction implémente une régression logistique stochastique. Elle peut être utilisée pour un problème de classification binaire, prend en charge les mêmes paramètres personnalisés que stochasticLinearRegression et fonctionne de la même manière.

Utilisation

La fonction s'utilise en deux étapes :

  1. Ajustement

Pour l'ajustement, 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, 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;

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 à logisticRegressionState. Ils doivent tous être des valeurs numériques. Notez que la colonne contenant la valeur cible (celle que nous voulons apprendre à prédire) est passée en premier argument.

Les étiquettes prédites doivent être comprises dans [-1, 1].

  1. Prédiction

À partir de l’état enregistré, nous pouvons prédire la probabilité qu’un objet ait l’étiquette 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

La requête renverra une colonne de probabilités. Notez que le premier argument de evalMLMethod est un objet AggregateFunctionState ; les suivants sont des colonnes de variables.

Nous pouvons également définir un seuil de probabilité, qui attribue les éléments à différentes étiquettes.

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)

Le résultat sera alors des étiquettes.

test_data est une table comme train_data, mais peut ne pas contenir de valeur cible.

Syntaxe

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

Arguments

  • learning_rate — Coefficient de longueur de pas utilisé lors 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 pouvant 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 et additionnés afin d’effectuer une étape de descente de gradient. La descente stochastique pure utilise un seul élément, mais l’utilisation de petits lots (environ 10 éléments) rend 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 demandent un peu plus de calculs et de mémoire, mais ils peuvent être utiles en termes de vitesse de convergence et de stabilité des méthodes de gradient stochastique. String
  • target — Étiquettes cibles de classification binaire. Elles doivent être comprises dans l’intervalle [-1, 1]. 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 logistique entraîné. Utilisez evalMLMethod pour effectuer des prédictions ; cette méthode renvoie les probabilités qu’un objet ait l’étiquette 1. 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, 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

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

Classification à seuil

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

Voir aussi

Navigation