비교 항목 | 릿지 회귀 (Ridge Regression) | 라쏘 회귀 (Lasso Regression) |
---|---|---|
정규화 방식 | L2 정규화 (제곱합 ∑βj2\sum \beta_j^2∑βj2) | L1 정규화 (절댓값 합 (\sum |
과적합 방지 | 가능 (모든 계수를 작게 만듦) | 가능 (일부 계수를 0으로 만들어 변수 선택) |
변수 선택 | ❌ 없음 (모든 변수를 유지) | ✅ 있음 (일부 계수를 0으로 만듦) |
계수 축소 방식 | 모든 계수를 작게 만듦 | 불필요한 변수의 계수를 0으로 만들어 완전히 제거 |
다중 공선성 해결 | ✅ 효과적 | ✅ 효과적이지만 릿지보다 불안정할 수 있음 |
해석 가능성 | ❌ 낮음 (모든 변수를 유지) | ✅ 높음 (불필요한 변수 제거) |
적합한 데이터셋 | 연속적인 데이터 (변수 선택이 필요하지 않은 경우) | 고차원 데이터 (변수 선택이 필요한 경우) |
모델의 복잡도 조절 | 모델의 크기만 줄임 (모든 변수를 사용) | 모델을 단순화하고 중요 변수만 선택 |
📌 핵심 차이점
- 릿지(Ridge)
- 모든 변수를 사용하지만 가중치(회귀 계수)를 작게 조정
- 다중 공선성이 있는 데이터에서 안정적인 성능을 보임
- 변수 선택을 하지 않음 (모든 변수를 유지)
- 라쏘(Lasso)
- 일부 변수를 완전히 제거하여 변수 선택 기능 제공
- 고차원 데이터에서 불필요한 변수를 자동으로 제거하여 해석이 쉬움
- 다중 공선성이 심한 경우, 일부 변수만 선택되므로 결과가 불안정할 수 있음
📊 릿지와 라쏘 비교 그래프
아래 그래프는 릿지와 라쏘의 계수 변화를 나타냅니다.
- 릿지(Ridge): 계수가 0으로 수렴하지 않음 (모든 변수를 사용)
- 라쏘(Lasso): 일부 계수가 0이 됨 (변수 선택 기능 제공)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge, Lasso
from sklearn.datasets import make_regression
# 데이터 생성
X, y = make_regression(n_samples=100, n_features=10, noise=10, random_state=42)
# 릿지와 라쏘 모델 생성
ridge = Ridge(alpha=1.0)
lasso = Lasso(alpha=0.1)
# 모델 학습
ridge.fit(X, y)
lasso.fit(X, y)
# 계수 시각화
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.bar(range(len(ridge.coef_)), ridge.coef_)
plt.title("Ridge Regression Coefficients")
plt.xlabel("Feature Index")
plt.ylabel("Coefficient Value")
plt.subplot(1, 2, 2)
plt.bar(range(len(lasso.coef_)), lasso.coef_)
plt.title("Lasso Regression Coefficients")
plt.xlabel("Feature Index")
plt.ylabel("Coefficient Value")
plt.show()
📌 언제 릿지 vs. 라쏘를 사용할까?
상황 | 추천 모델 |
---|---|
모든 변수를 유지하고 싶음 | 릿지 (Ridge) |
다중 공선성이 높은 경우 | 릿지 (Ridge) |
중요하지 않은 변수를 자동으로 제거하고 싶음 | 라쏘 (Lasso) |
데이터에 변수가 많고 일부만 중요한 경우 | 라쏘 (Lasso) |
변수 선택 기능이 필요 없음 | 릿지 (Ridge) |
모델을 더 간결하게 만들고 싶음 | 라쏘 (Lasso) |
📌 결론 (한 줄 요약)
- 릿지(Ridge) 회귀: 모든 변수를 유지하면서 가중치를 줄이는 방식.
- 라쏘(Lasso) 회귀: 불필요한 변수의 가중치를 0으로 만들어 변수 선택 기능을 제공.
고차원 데이터에서 변수 선택이 필요하면 라쏘, 모든 변수를 유지하면서 조절하고 싶다면 릿지!