stochasticLogisticRegression
導入バージョン: v20.1.0
この関数は、確率的ロジスティック回帰を実装します。
二値分類問題に使用でき、stochasticLinearRegression と同じカスタムパラメータをサポートし、同様に動作します。
使用方法
この関数は次の 2 つの手順で使用します。
- 学習
学習には、次のようなクエリを使用できます。
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;ここでは、train_dataテーブルにもデータを挿入する必要があります。
パラメータの数は固定ではなく、logisticRegressionState に渡す引数の数にのみ依存します。
これらはすべて数値でなければなりません。
予測したい目的値を持つカラムは、最初の引数として挿入することに注意してください。
予測されるラベルは [-1, 1] の範囲内でなければなりません。
- 予測
保存された状態を使用すると、あるオブジェクトがラベル 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このクエリは、確率のカラムを返します。
evalMLMethod の最初の引数は AggregateFunctionState オブジェクトで、その後に特徴量のカラムが続きます。
確率のしきい値を設定して、要素を異なるラベルに割り当てることもできます。
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)その場合、結果はラベルになります。
test_data は train_data と同様のテーブルですが、目的値を含まない場合があります。
構文
stochasticLogisticRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)引数
learning_rate— 勾配降下法の各ステップにおけるステップ長の係数です。学習率が大きすぎると、モデルの重みが無限大になる可能性があります。デフォルトは0.00001です。Float64l2_regularization_coef— 過学習の防止に役立つ場合がある L2 正則化係数です。デフォルトは0.1です。Float64mini_batch_size— 勾配降下法の 1 ステップを実行する際に、勾配を計算して合計する要素数を設定します。純粋な確率的勾配降下法では 1 つの要素を使用しますが、小さなバッチ (約 10 要素) を使うと勾配ステップがより安定します。デフォルトは15です。UInt64method— 重みの更新方法です:Adam(デフォルト) 、SGD、Momentum、Nesterov。MomentumとNesterovは計算量とメモリ消費がやや増えますが、収束速度と確率的勾配法の安定性の面で有用です。Stringtarget— 二値分類のターゲットラベルです。範囲 [-1, 1] に含まれている必要があります。Floatx1, x2, ...— 特徴量の値 (独立変数) です。すべて数値である必要があります。Float
戻り値
学習済みロジスティック回帰モデルの重みを返します。予測には evalMLMethod を使用します。この関数は、オブジェクトがラベル 1 を持つ確率を返します。Array(Float64)
例
モデルの学習
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_model1予測
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
1しきい値による分類
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関連項目