> ## 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.

> この関数は確率的ロジスティック回帰を実装します。二値分類問題に使用でき、 stochasticLinearRegression と同じカスタムパラメータをサポートし、同様に動作します。

# stochasticLogisticRegression

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

導入バージョン: v20.1.0

この関数は、確率的ロジスティック回帰を実装します。
二値分類の問題に使用でき、[`stochasticLinearRegression`](/ja/reference/functions/aggregate-functions/stochasticLinearRegression) と同じカスタムパラメータをサポートし、同様に動作します。

**使用方法**

この関数は次の 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
stochasticLogisticRegression(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;
```

ここでは、`train_data`テーブルにもデータを挿入する必要があります。
パラメータの数は固定ではなく、`logisticRegressionState` に渡す引数の数にのみ依存します。
これらはすべて数値でなければなりません。
予測したい目的値を持つカラムは、最初の引数として挿入することに注意してください。

予測されるラベルは \[-1, 1] の範囲内でなければなりません。

2. 予測

保存された状態を使用すると、あるオブジェクトがラベル `1` を持つ確率を予測できます。

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

このクエリは、確率のカラムを返します。
`evalMLMethod` の最初の引数は `AggregateFunctionState` オブジェクトで、その後に特徴量のカラムが続きます。

確率のしきい値を設定して、要素を異なるラベルに割り当てることもできます。

```sql theme={null}
SELECT result < 1.1 AND result > 0.5 FROM
(WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) AS result FROM test_data)
```

その場合、結果はラベルになります。

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

**構文**

```sql theme={null}
stochasticLogisticRegression([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` は計算量とメモリ消費がやや増えますが、収束速度と確率的勾配法の安定性の面で有用です。[`String`](/ja/reference/data-types/string)
* `target` — 二値分類のターゲットラベルです。範囲 \[-1, 1] に含まれている必要があります。[`Float`](/ja/reference/data-types/float)
* `x1, x2, ...` — 特徴量の値 (独立変数) です。すべて数値である必要があります。[`Float`](/ja/reference/data-types/float)

**戻り値**

学習済みロジスティック回帰モデルの重みを返します。予測には `evalMLMethod` を使用します。この関数は、オブジェクトがラベル `1` を持つ確率を返します。[`Array(Float64)`](/ja/reference/data-types/array)

**例**

**モデルの学習**

```sql title=Query theme={null}
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
```

```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 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)
```

```response title=Response theme={null}
確率閾値を使用して二値分類ラベルを返します
```

**関連項目**

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