상세 컨텐츠

본문 제목

회귀분석-릿지 회귀(Ridge Regression)

인공지능/머신러닝

by 2^7 2024. 10. 30. 21:00

본문

릿지 회귀(Ridge Regression)

 선형 회귀의 한 형태로, 정규화(Regularization) 기법을 통해 모델의 과적합(Overfitting)을 방지하는 데 사용함, 릿지 회귀는 회귀 계수의 크기를 제한하여, 복잡한 모델이 되는 것을 막고 모델의 일반화 성능을 높임

 

1. 릿지 회귀 기본 개념

  • L2 정규화를 사용하는 회귀 모델로, 회귀 계수의 크기를 제곱해 패널티를 부과함
  • 이를 통해 계수가 지나치게 커지는 것을 막아 과적합을 방지
  • 릿지 회귀의 손실함수는 일반적인 선형 회귀에서 사용하는 평균 제곱 오차(Mean Squared Error, MSE) 손실 함수에 규제 항을 추가함
  • 값이 클수록 계수에 더 큰 패널티를 부과하여 모델의 복잡성을 낮추고, 작을수록 패널티가 줄어들어 일반 선형 회귀와 비슷해짐

 

2. 릿지 회귀 장점

1) 과적합 방지

  • 릿지 회귀는 높은 차원의 데이터셋에서 다중공선성(multicollinearity)이 존재할 때 유용
  • 다중공선성은 독립 변수들 간의 상관관계가 높은 경우를 말하며, 이런 경우 선형 회귀 모델의 계수가 불안정해질 수 있음
  • 릿지 회귀는 과적합을 방지하여 데이터에 대한 예측 성능을 향상시킴

2) 정규화 강도 조절

  • 값에 따라 패널티 정도를 조절할 수 있으며, 최적의 λ를 찾기 위해 교차 검증(Cross-Validation)을 사용할 수 있음
  • λ가 너무 크면 모델이 과소적합(underfitting)될 수 있으므로 적절한 값으로 조정하는 것이 중요함

 

3. 릿지 회귀 학습 방법

 릿지 회귀의 목적은 위 손실 함수를 최소화하는 회귀 계수 벡터 β를 찾는 것으로 주요 학습 방법에는 정규 방정식경사 하강법이 있음

1) 정규 방정식

  • 폐쇄형 솔루션을 사용해 릿지 회귀의 최적 해를 구하는 방법
  • 이 방법은 데이터의 차원이 적고 계산이 가능한 경우 유리함
  • 정규 방정식을 사용하면 행렬 계산을 통해 최적의 β를 직접 계산할 수 있지만, 데이터가 매우 큰 경우 역행렬 계산이 비효율적이어서 경사 하강법이 더 적합할 수 있음

2) 경사 하강법

  • 경사 하강법은 반복적으로 손실 함수를 미분한 기울기를 사용해 계수를 업데이트하는 방법
  • 데이터가 매우 큰 경우 또는 차원이 높은 경우, 경사 하강법이 효율적
  • 경사 하강법에서는 아래식을 반복하여 손실 함수가 최소화될 때까지 업데이트
  • 확률적 경사 하강법(Stochastic Gradient Descent, SGD)을 사용하여 데이터 샘플 하나씩 학습할 수도 있음

 

4. 릿지 회귀 특징

  • 과적합을 방지하여 모델의 일반화 성능을 높임
  • 다중공선성 문제를 완화하여 회귀 계수를 안정화
  • 계수의 크기를 제어할 뿐이므로, 실제로 계수가 0이 되지 않아 일부 변수를 완전히 제외하고 모델을 단순화하기 어려운 점이 있음
  • 모든 독립 변수를 포함하여 예측 모델을 학습하기 때문에 해석이 어려울 수 있음

 

5. 릿지 회귀와 라쏘 회귀의 비교

 릿지 회귀와 비슷한 정규화 방법으로 라쏘 회귀(Lasso Regression)가 있으며 라쏘 회귀는 L1 정규화를 사용하여, 일부 회귀 계수를 0으로 만들어 변수 선택이 가능하게 함

 

  • 릿지 회귀
    • L2 정규화 사용. 회귀 계수를 0에 가깝게 만들지만 완전히 0이 되지는 않음.
    • 주로 모델의 복잡도를 줄이기 위해 사용됩니다.
  • 라쏘 회귀
    •  L1 정규화 사용. 일부 회귀 계수를 완전히 0으로 만들어 변수 선택이 가능하여 특성 선택이 필요할 때 유용

 


Python의 Scikit-learn 라이브러리를 사용하여 간단하게 릿지 회귀 모델을 구현하는 방법

from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# 예제 데이터 생성
X = np.random.rand(100, 1) * 10  # 0~10 사이의 값을 가진 데이터
y = 3 + 2 * X + np.random.randn(100, 1) * 2  # 실제 데이터(잡음 포함)

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 릿지 회귀 모델 생성 및 학습 (λ=1)
ridge_model = Ridge(alpha=1.0)  # alpha가 λ에 해당
ridge_model.fit(X_train, y_train)

# 예측
y_pred = ridge_model.predict(X_test)

# 평가
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)

 

 

 

728x90

관련글 더보기