メインコンテンツへスキップ
メインコンテンツへスキップ

stochasticLinearRegression

stochasticLinearRegression

導入バージョン: v20.1

この関数は確率的線形回帰を実装します。 以下のカスタムパラメーターをサポートします:

  • 学習率
  • L2 正則化係数
  • ミニバッチサイズ

また、重みを更新するための手法をいくつか提供します:

  • Adam(デフォルト)
  • 単純 SGD
  • Momentum
  • Nesterov

使用方法

この関数は 2 段階で使用します。モデルのフィッティングと、新しいデータに対する予測です。

  1. フィッティング

フィッティングには、次のようなクエリを使用できます:

CREATE TABLE IF NOT EXISTS train_data
(
    param1 Float64,
    param2 Float64,
    target Float64
) ENGINE = Memory;

CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;

ここでは、train_data テーブルにもデータを挿入する必要があります。 パラメータ数は固定ではなく、linearRegressionState に渡す引数の数だけに依存します。 それらはすべて数値である必要があります。 目的値(予測対象として学習したい値)を格納するカラムは、最初の引数として渡す点に注意してください。

  1. 予測

状態をテーブルに保存した後は、その状態を予測に複数回利用したり、他の状態とマージして新たな、さらに優れたモデルを作成したりできます。

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data

このクエリは予測値からなるカラムを返します。 evalMLMethod の最初の引数は AggregateFunctionState オブジェクトであり、以降の引数が特徴量のカラムです。

test_datatrain_data と同様のテーブルですが、目的変数を含まない場合があります。

注意事項

  1. 2つのモデルをマージするには、次のようなクエリを作成できます:
SELECT state1 + state2 FROM your_models

ここで、your_models テーブルには両方のモデルが格納されています。 このクエリは新しい AggregateFunctionState オブジェクトを返します。

  1. -State コンビネータが使用されていない場合、モデルを保存せずに、任意の用途のために作成したモデルの重みだけを取得することができます。
SELECT stochasticLinearRegression(0.01)(target, param1, param2)
FROM train_data

このようなクエリを実行すると、モデルが当てはめられ、その重みが返されます。最初の値はモデルのパラメータに対応する重みで、最後の値はバイアスです。 したがって上記の例では、そのクエリは 3 つの値を持つカラムを返します。

構文

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

引数

  • learning_rate — 勾配降下法のステップを実行する際のステップ幅に掛ける係数。学習率が大きすぎると、モデルの重みが無限大になる可能性があります。デフォルトは 0.00001Float64
  • l2_regularization_coef — 過学習の防止に役立つ可能性がある L2 正則化係数。デフォルトは 0.1Float64
  • mini_batch_size — 勾配降下法の 1 ステップを実行するために、勾配を計算して合計する要素数を設定します。純粋な確率的勾配降下法では 1 要素を使用しますが、小さなバッチ(約 10 要素)にすると、勾配ステップがより安定します。デフォルトは 15UInt64
  • method — 重みを更新するためのメソッド: Adam(デフォルト)、SGDMomentumNesterovMomentumNesterov はわずかに多くの計算とメモリを必要としますが、確率的勾配法の収束速度と安定性の観点で有用な場合があります。const String
  • target — 予測対象となる値(従属変数)。数値でなければなりません。Float*
  • x1, x2, ... — 特徴量の値(独立変数)。すべて数値でなければなりません。Float*

返される値

学習済み線形回帰モデルの重みを返します。先頭の値がモデルのパラメータに対応し、最後の 1 つがバイアスです。予測には evalMLMethod を使用します。Array(Float64)

使用例

モデルの学習

CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data
Saves trained model state to table

予測の実行

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data
Returns predicted values for test data

モデルの重みの取得

SELECT stochasticLinearRegression(0.01)(target, x1, x2) FROM train_data
Returns model weights without saving state

参照