홈으로 돌아가기

선형 회귀: OLS 방법과 경사 하강법

이 기사는 기본 방정식부터 고급 기법(OLS, 경사 하강법, 정규화, 이상치 처리)까지 선형 회귀를 분해합니다. 실전 구현을 위한 Python 코드와 품질 지표가 제공됩니다.

선형 회귀를 처음부터 구축하기: 코드와 지표
Advertisement 728x90

선형 회귀: 데이터에서 최적화된 모델까지

선형 회귀는 예측 변수와 목표 변수 간의 선형 관계를 모델링합니다. 단순 선형 회귀의 경우 방정식은 y = b₀ + b₁ × x이며, 여기서 x는 예측 변수, y는 응답 변수, b₀는 절편, b₁은 기울기입니다. 계수는 평면에서 선의 위치를 결정합니다.

특징과 응답 변수가 포함된 표 형식의 데이터가 기초가 됩니다. 예: 아파트 가격과 방 개수 간의 관계. 모델 품질은 표본의 대표성에 달려있으며, '쓰레기를 넣으면 쓰레기가 나온다'는 원리가 결과를 지배합니다.

모델은 예측과 패턴 식별에 유용합니다. 표 형식의 데이터를 분석적 표현으로 변환하면 새로운 관측치에 대한 외삽이 가능합니다.

Google AdInline article slot

최소제곱법

OLS(최소제곱법)는 잔차 제곱합을 최소화합니다: ∑(y_i - ŷ_i)². 해석적 해: b₁ = Cov(x, y) / Var(x), b₀ = ȳ - b₁ × x̄.

# 계수 계산 예시
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
b1 = np.cov(x, y)[0,1] / np.var(x)
b0 = np.mean(y) - b1 * np.mean(x)
print(f'b0: {b0:.2f}, b1: {b1:.2f}')

이 접근법은 비퇴화 데이터에 작동하지만, 다변량 경우에는 행렬 역행 (XᵀX)⁻¹이 필요합니다.

모델 품질 평가

시각적으로: 예측값 대 실제값의 산점도, 잔차 플롯. 지표:

Google AdInline article slot
  • (결정 계수): 설명된 분산 비율, 0–1.
  • RMSE: √(MSE), 응답 변수 단위.
  • MAE: 평균 절대 오차.
  • MAPE/SMAPE: 백분율 오차.

잔차 플롯은 이분산성이나 비선형성을 드러냅니다.

데이터 분할 및 검증

훈련/테스트 분할(80/20)은 과적합을 방지합니다. 교차 검증(k-겹)은 폴드 간 지표를 평균화합니다.

def train_test_split(X, y, test_size=0.2):
    indices = np.arange(len(X))
    np.random.shuffle(indices)
    split = int(len(X) * (1 - test_size))
    return X[indices[:split]], X[indices[split:]], y[indices[:split]], y[indices[split:]]

다변량 회귀

y = b₀ + b₁x₁ + ... + bₙxₙ로 확장됩니다. 행렬 형태: ŷ = Xβ, 해 β = (XᵀX)⁻¹Xᵀy. 전처리:

Google AdInline article slot
  • 정규화: (x - 최소)/(최대 - 최소).
  • 표준화: (x - μ)/σ.
  • 범주형 특징의 원-핫 인코딩.

확률적 해석

모델은 오차의 정규 분포를 가정합니다: ε ~ N(0, σ²). 예측 구간: *ŷ ± t SE √(1 + 1/n + (x - x̄)² / SXX)*. 최대우도추정(MLE)은 로그 우도를 최적화합니다.

이상치 처리

탐지 방법:

  • 마할라노비스 거리: 다변량 공간에서의 일반화된 거리.
  • 쿡 거리: 관측치가 계수에 미치는 영향.
  • LOF (지역 이상치 인자): 지역 밀도.
  • RANSAC: 무작위 부분집합의 합의.

제거 또는 강건한 회귀기(Huber 손실).

경사 하강법과 정규화

대규모 데이터의 경우: 반복적 최적화 θ := θ - α ∇J(θ), 여기서 J는 비용 함수.

  • L1 (라쏘): |β|, 희소성.
  • L2 (릿지): β², 축소.

하이퍼파라미터 λ는 교차 검증으로 조정됩니다.

def gradient_descent(X, y, lr=0.01, epochs=1000):
    theta = np.zeros(X.shape[1])
    for _ in range(epochs):
        pred = X @ theta
        grad = X.T @ (pred - y) / len(y)
        theta -= lr * grad
    return theta

핵심 요약

  • 선형 회귀는 선형 관계를 위한 기본 도구로, 다변량 작업으로 확장 가능합니다.
  • OLS는 해석적 해를 제공하며, 경사 하강법은 대규모 데이터셋에 사용됩니다.
  • R²와 RMSE 같은 지표로 품질을 평가하고, 잔차 플롯으로 문제를 진단합니다.
  • 정규화(L1/L2)는 과적합과 다중공선성을 방지합니다.
  • 전처리(스케일링, 이상치 제거)는 안정성에 중요합니다.

— Editorial Team

Advertisement 728x90

다음 읽기