> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.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

**사용법**

이 함수는 두 단계로 사용합니다. 먼저 모델을 학습시키고, 그다음 새 데이터에 대해 예측합니다.

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. 두 모델을 머지하려면 다음과 같은 쿼리를 만들 수 있습니다:

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

이와 같은 쿼리를 실행하면 모델이 학습되고 가중치가 반환됩니다. 앞의 값들은 모델의 매개변수에 해당하는 가중치이며, 마지막 값은 바이어스입니다.
따라서 위 예시에서 쿼리는 3개의 값으로 이루어진 컬럼을 반환합니다.

**구문**

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

**인수**

* `learning_rate` — 경사 하강을 수행할 때 스텝 길이에 곱해지는 계수입니다. 학습률이 너무 크면 모델의 가중치가 무한대로 발산할 수 있습니다. 기본값은 `0.00001`입니다. [`Float64`](/ko/reference/data-types/float)
* `l2_regularization_coef` — 과적합을 방지하는 데 도움이 될 수 있는 L2 정규화 계수입니다. 기본값은 `0.1`입니다. [`Float64`](/ko/reference/data-types/float)
* `mini_batch_size` — 경사 하강을 한 번 수행하기 위해 그래디언트를 계산하고 합산할 요소 수를 설정합니다. 순수 확률적 하강에서는 요소 1개를 사용하지만, 작은 배치(약 10개 요소)를 사용하면 경사 하강 단계가 더 안정적입니다. 기본값은 `15`입니다. [`UInt64`](/ko/reference/data-types/int-uint)
* `method` — 가중치를 갱신하는 메서드입니다: `Adam`(기본값), `SGD`, `Momentum`, `Nesterov`. `Momentum`과 `Nesterov`는 계산량과 메모리 사용량이 약간 더 많지만, 수렴 속도와 확률적 경사 메서드의 안정성 측면에서 유용할 수 있습니다. [`const String`](/ko/reference/data-types/string)
* `target` — 예측하도록 학습할 대상 값(종속 변수)입니다. 숫자여야 합니다. [`Float*`](/ko/reference/data-types/float)
* `x1, x2, ...` — 특성 값(독립 변수)입니다. 모두 숫자여야 합니다. [`Float*`](/ko/reference/data-types/float)

**반환 값**

학습된 선형 회귀 모델의 가중치를 반환합니다. 앞의 값들은 모델의 매개변수에 해당하며, 마지막 값은 바이어스입니다. 예측에는 `evalMLMethod`를 사용합니다. [`Array(Float64)`](/ko/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](/ko/reference/functions/aggregate-functions/stochasticLogisticRegression)
* [선형 회귀와 로지스틱 회귀의 차이점](https://stackoverflow.com/questions/12146914/what-is-the-difference-between-linear-regression-and-logistic-regression)
