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

stochasticLinearRegression

この関数は確率的線形回帰を実装します。学習率、L2 正則化係数、ミニバッチサイズのパラメータをカスタマイズでき、重み更新のための複数の手法(Adam(デフォルト)、simple SGDMomentumNesterov)をサポートします。

パラメータ

カスタマイズ可能なパラメータは 4 つあります。これらは関数に順番に渡されますが、4 つすべてを渡す必要はありません。指定されていないものにはデフォルト値が使用されます。ただし、より良いモデルを得るには、いくつかのパラメータ調整が必要です。

stochasticLinearRegression(0.00001, 0.1, 15, 'Adam')
  1. learning rate は、勾配降下ステップを実行する際のステップ長にかかる係数です。学習率が大きすぎると、モデルの重みが無限大になる可能性があります。デフォルトは 0.00001 です。
  2. l2 regularization coefficient は、過学習を防ぐのに役立つ場合があります。デフォルトは 0.1 です。
  3. mini-batch size は、1 回の勾配降下ステップを行うために勾配を計算して合計する要素の数を設定します。純粋な確率的勾配降下法では 1 つの要素を使用しますが、小さなバッチ(約 10 要素)を使用すると、勾配ステップがより安定します。デフォルトは 15 です。
  4. method for updating weights は次のとおりです: Adam(デフォルト)、SGDMomentumNesterovMomentumNesterov は、計算量とメモリをやや多く必要としますが、確率的勾配降下法の収束速度と安定性の観点から有用な場合があります。

使用方法

stochasticLinearRegression は、モデルのフィッティングと新しいデータへの予測という 2 つのステップで使用します。モデルをフィットさせ、その状態を後で使用できるように保存するために、-State コンビネータを使用します。これは状態(例: モデルの重み)を保存します。 予測を行うには、evalMLMethod 関数を使用します。この関数は、状態と予測対象の特徴量を引数として受け取ります。

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, param1, param2)
AS state FROM train_data;

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

2. 予測

状態をテーブルに保存した後は、その状態を予測に何度でも利用できるほか、他の状態とマージして新しい、さらに優れたモデルを作成することもできます。

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) FROM test_data

このクエリは、予測値のカラムを返します。evalMLMethod の第1引数には AggregateFunctionState オブジェクトが渡され、その後に特徴量のカラムが続く点に注意してください。

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

注意事項

  1. 2つのモデルをマージするには、次のようなクエリを作成できます: sql SELECT state1 + state2 FROM your_models ここで、your_models テーブルには両方のモデルが含まれています。このクエリは新しい AggregateFunctionState オブジェクトを返します。

  2. -State コンビネータを使用しない場合、モデルを保存せずに、作成されたモデルの重みのみを独自の用途で取得できます。 sql SELECT stochasticLinearRegression(0.01)(target, param1, param2) FROM train_data このクエリはモデルを学習させ、その重みを返します。先頭の値はモデルのパラメータに対応する重みで、最後の1つはバイアスです。したがって上記の例では、このクエリは3つの値を持つカラムを返します。

参照