본문 바로가기
AI/Machine-Learning

[Scikit-learn] LinearRegression, SGDRegressor

by Wikinist 2023. 8. 28.

Scikit-learn은 파이썬의 머신러닝 라이브러리로, 다양한 머신러닝 알고리즘과 도구를 제공합니다. 여기서는 Scikit-learn 라이브러리 내의 LinearRegression과 SGDRegressor에 대해 간단히 설명하겠습니다.

LinearRegression

선형 회귀(Linear Regression)는 종속 변수(y)와 하나 이상의 독립 변수(x) 간의 관계를 모델링하는 데 사용되는 통계적 기법입니다. 간단히 말해, 주어진 데이터 포인트들을 가장 잘 나타내는 선형 함수를 찾는 과정입니다. 선형 회귀는 주어진 데이터와 가장 잘 맞는 직선(또는 다차원 공간에서의 평면)을 찾아내는 것이 목표입니다. 기본적으로 오차의 제곱을 최소화하는 방향으로 모델 파라미터(계수와 절편)를 조정하여 학습합니다.

from sklearn.linear_model import LinearRegression : 회귀 공식을 이용한 모델

from sklearn.linear_model import LinearRegression

# 모델 생성
model = LinearRegression()

# 데이터를 통해 모델 학습
model.fit(X, y)

# 예측
predictions = model.predict(X_new)

SGDRegressor

확률적 경사 하강법(Stochastic Gradient Descent, SGD)은 매우 큰 데이터셋에서 선형 회귀와 같은 모델을 효율적으로 학습하는 기법입니다. 전체 데이터셋을 한 번에 사용하는 대신에, 랜덤하게 선택된 작은 미니배치(mini-batch) 데이터를 사용하여 파라미터를 업데이트하는 방식을 사용합니다. 이는 계산 비용을 줄이면서도 모델 파라미터를 업데이트하여 최적화를 수행합니다.

SGDRegressor는 이 SGD 방식을 선형 회귀 모델에 적용한 것입니다. 이 모델은 데이터 포인트마다의 오차를 줄이는 방향으로 모델 파라미터를 조정합니다. 미니배치 단위로 데이터를 사용하기 때문에 수렴 속도가 빠르며, 대용량 데이터셋에서도 효율적으로 작동할 수 있습니다. 하지만 SGD는 무작위성을 포함하고 있기 때문에 수렴 속도와 결과의 안정성에 약간의 변동성을 가질 수 있습니다.

from sklearn.linear_model import SGDRegressor : 경사하강법을 사용한 모델

from sklearn.linear_model import SGDRegressor

# SGD Regressor 모델 생성
model_sgd = SGDRegressor(max_iter=1000, tol=1e-3)

# 데이터 준비 (LinearRegression 예제와 동일)

# 모델 학습
model_sgd.fit(X, y)

# 학습된 모델로 예측
predictions_sgd = model_sgd.predict(X_new)
print(predictions_sgd)  # 예측값 출력


두 모델 모두 선형 회귀를 위해 사용되지만, LinearRegression은 일반적인 최소 제곱 방법을 사용하여 직선을 최적화하고, SGDRegressor는 확률적 경사 하강법을 사용하여 최적화합니다. SGDRegressor는 대용량 데이터셋에 유용하며, 학습률과 규제와 같은 하이퍼파라미터를 조정하여 모델의 성능을 향상시킬 수 있습니다.

SGDRegressor 시그니처

SGDRegressor 클래스는 scikit-learn 라이브러리에서 제공하는 확률적 경사 하강법을 사용한 선형 회귀 모델을 구현한 클래스입니다. 이 모델은 대용량 데이터셋에서도 효율적으로 작동할 수 있도록 설계되었습니다. 아래는 SGDRegressor의 주요 생성자 시그니처와 매개변수에 대한 간단한 설명입니다.

SGDRegressor(loss='squared_loss', penalty='l2', alpha=0.0001, l1_ratio=0.15,
              fit_intercept=True, max_iter=1000, tol=1e-3, shuffle=True,
              verbose=0, epsilon=0.1, random_state=None, learning_rate='invscaling',
              eta0=0.01, power_t=0.25, early_stopping=False, validation_fraction=0.1,
              n_iter_no_change=5, warm_start=False, average=False)

loss: 손실 함수를 지정하는 매개변수입니다. 기본값은 'squared_loss'로 최소제곱 오차를 의미합니다.
penalty: 규제(regularization) 항을 지정하는 매개변수입니다. 기본값은 'l2'로 L2 규제를 사용합니다.
alpha: 규제 강도를 조절하는 매개변수로, 높은 값은 더 강한 규제를 의미합니다.
l1_ratio: Elastic Net 규제에서 L1 규제의 비율을 지정하는 매개변수입니다.
fit_intercept: 절편(intercept)을 학습할지 여부를 결정하는 매개변수입니다.
max_iter: 최대 반복 횟수를 지정하는 매개변수입니다.
tol (Tolerance): tol은 SGD가 수렴한 것으로 간주되는 조건을 정의합니다. 즉, 손실 함수의 변화가 이 값보다 작아지면 학습을 멈춥니다. SGD는 반복마다 손실 함수가 줄어들지만, 완전히 수렴할 필요는 없습니다. tol 값은 얼마나 정확한 결과가 필요한지를 결정합니다. 더 작은 tol 값은 더 정확한 결과를 얻을 수 있지만, 더 많은 반복이 필요할 수 있습니다. 
shuffle: 매 반복마다 데이터를 섞을지 여부를 결정하는 매개변수입니다.
learning_rate (Learning Rate): learning_rate는 각 반복에서 파라미터를 얼마나 조정할지 결정하는 매개변수입니다. 기본적으로 'invscaling' 방식을 사용합니다. 이 방식은 초기 학습률을 eta0로 설정하고, 반복마다 1 / (t + t0)^power_t 값을 곱하여 학습률을 조절합니다. 여기서 t는 현재 반복 횟수를 나타내며, t0는 초기값을 지정하는 상수입니다. 다양한 학습률 스케줄링 방법을 시도하여 모델의 수렴 속도와 안정성을 향상시킬 수 있습니다.
eta0 (Initial Learning Rate): eta0는 초기 학습률을 지정하는 매개변수입니다. 'invscaling' 방식에서 학습률을 초기화할 때 사용됩니다. 초기 학습률은 모델 학습 초기에 파라미터를 얼마나 크게 조정할지를 결정합니다. 너무 작은 초기 학습률은 학습 속도를 늦출 수 있고, 너무 큰 초기 학습률은 수렴하지 않을 수 있습니다.
power_t (Power for Inverse Scaling Learning Rate): power_t는 'invscaling' 학습률 업데이트에 사용되는 지수 값을 결정합니다. 학습률은 반복마다 1 / (t + t0)^power_t와 같은 식으로 업데이트됩니다. 작은 값인 경우 학습률이 빠르게 줄어들고, 큰 값인 경우 더 완만하게 줄어듭니다.
early_stopping: 조기 종료(early stopping)를 사용할지 여부를 결정하는 매개변수입니다.
validation_fraction: 조기 종료를 위해 예약된 검증 데이터의 비율을 지정합니다.
그 외에도 다양한 매개변수들이 있습니다.
이러한 매개변수들을 조정하여 모델의 학습 과정과 결과를 조절할 수 있습니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'AI > Machine-Learning' 카테고리의 다른 글

RobustScaler  (0) 2023.08.29
다중 선형 회귀와 절차  (0) 2023.08.29
결정계수 (Coefficient of Determination)  (0) 2023.08.28
[NumPy] matmul(), dot()  (0) 2023.08.28
Numpy rand(), randn()  (0) 2023.08.28