본문으로 바로가기
본문으로 바로가기

stochasticLinearRegression

stochasticLinearRegression

도입된 버전: v20.1

이 함수는 확률적 선형 회귀를 구현합니다. 다음과 같은 사용자 정의 매개변수를 지원합니다:

  • 학습률
  • L2 정규화 계수
  • 미니배치 크기

또한 가중치를 업데이트하기 위한 몇 가지 방법을 제공합니다:

  • Adam (기본값)
  • 단순 SGD
  • Momentum
  • Nesterov

사용 방법

이 함수는 두 단계로 사용됩니다: 먼저 모델을 피팅(fitting)한 뒤 새로운 데이터에 대한 예측에 사용합니다.

  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. 두 개의 모델을 병합하기 위해 사용자는 다음과 같은 쿼리를 작성할 수 있습니다:
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.00001입니다. Float64
  • l2_regularization_coef — 과적합을 방지하는 데 도움이 될 수 있는 L2 정규화 계수입니다. 기본값은 0.1입니다. Float64
  • mini_batch_size — 한 번의 경사 하강 단계를 수행하기 위해, 기울기를 계산하고 합산할 요소의 개수를 설정합니다. 완전한 확률적(스토캐스틱) 하강법은 하나의 요소만 사용하지만, 약 10개 정도의 작은 배치를 사용하면 경사 단계가 더 안정적이 됩니다. 기본값은 15입니다. UInt64
  • method — 가중치 갱신 방법입니다: Adam(기본값), SGD, Momentum, Nesterov. MomentumNesterov는 계산량과 메모리가 조금 더 필요하지만, 수렴 속도와 확률적 경사 하강법의 안정성 측면에서 유용합니다. const String
  • target — 예측하도록 학습할 타깃 값(종속 변수)입니다. 숫자형이어야 합니다. Float*
  • x1, x2, ... — 특성 값(독립 변수)입니다. 모두 숫자형이어야 합니다. Float*

반환 값

학습된 선형 회귀 모델의 가중치를 반환합니다. 앞의 값들은 모델의 파라미터에 해당하고, 마지막 값은 편향(bias)입니다. 예측에는 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

참고