> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> この関数は確率的線形回帰を実装します。学習率、L2正則化係数、ミニバッチサイズのカスタムパラメータをサポートし、重みを更新するための複数の方法（Adam、単純なSGD、Momentum、Nesterov）を備えています。

# stochasticLinearRegression

<div id="stochasticLinearRegression">
  ## stochasticLinearRegression
</div>

導入バージョン: v20.1.0

この関数は、確率的線形回帰を実装します。
次の項目について、カスタムパラメータをサポートしています。

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

また、重みを更新するための手法もいくつか用意されています。

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

**使用方法**

この関数の使用は、モデルの学習と新しいデータに対する予測の 2 段階で行います。

1. 学習

学習には、次のようなクエリを使用できます。

```sql theme={null}
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` に渡す引数の数によってのみ決まります。
これらはすべて数値でなければなりません。
予測するよう学習させたい目的値を持つカラムは、最初の引数として挿入されることに注意してください。

2. 予測

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

```sql theme={null}
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data
```

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

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

**注記**

1. 2 つのモデルをマージするには、次のようなクエリを作成できます。

```sq; theme={null}
SELECT state1 + state2 FROM your_models
```

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

2. `-State` combinator を使用しない場合は、モデルを保存しなくても、作成したモデルの重みを必要に応じて取得できます。

```sql theme={null}
SELECT stochasticLinearRegression(0.01)(target, param1, param2)
FROM train_data
```

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

**構文**

```sql theme={null}
stochasticLinearRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)
```

**引数**

* `learning_rate` — 勾配降下法のステップを実行する際のステップ幅に対する係数です。学習率が大きすぎると、モデルの重みが無限大になる可能性があります。デフォルトは `0.00001` です。[`Float64`](/ja/reference/data-types/float)
* `l2_regularization_coef` — 過学習の防止に役立つ可能性がある L2 正則化係数です。デフォルトは `0.1` です。[`Float64`](/ja/reference/data-types/float)
* `mini_batch_size` — 勾配を計算して合計し、勾配降下法の 1 ステップを実行する要素数を設定します。純粋な確率的勾配降下法では 1 つの要素を使用しますが、小さなバッチ (約 10 要素) を使うと勾配ステップがより安定します。デフォルトは `15` です。[`UInt64`](/ja/reference/data-types/int-uint)
* `method` — 重みの更新方法です: `Adam` (デフォルト) 、`SGD`、`Momentum`、`Nesterov`。`Momentum` と `Nesterov` はやや多くの計算量とメモリを必要としますが、収束速度と確率的勾配法の安定性の面で有用です。[`const String`](/ja/reference/data-types/string)
* `target` — 予測対象として学習する目的変数です。数値である必要があります。[`Float*`](/ja/reference/data-types/float)
* `x1, x2, ...` — 特徴量の値 (独立変数) です。すべて数値である必要があります。[`Float*`](/ja/reference/data-types/float)

**戻り値**

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

**例**

**モデルの学習**

```sql title=Query theme={null}
CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data
```

```response title=Response theme={null}
学習済みモデルの状態をテーブルに保存します
```

**予測する**

```sql title=Query theme={null}
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data
```

```response title=Response theme={null}
テストデータの予測値を返します
```

**モデルの重みを取得する**

```sql title=Query theme={null}
SELECT stochasticLinearRegression(0.01)(target, x1, x2) FROM train_data
```

```response title=Response theme={null}
状態を保存せずにモデルの重みを返します
```

**関連項目**

* [stochasticLogisticRegression](/ja/reference/functions/aggregate-functions/stochasticLogisticRegression)
* [線形回帰とロジスティック回帰の違い](https://stackoverflow.com/questions/12146914/what-is-the-difference-between-linear-regression-and-logistic-regression)
