본문 바로가기
정보/IT 지식 정보

Ridge vs LASSO vs ElasticNet — 과적합을 잡는 규제 기법 총정리 [8편]

by 안다니. 2026. 4. 6.
반응형
릿지 랏소 엘라스틱넷

 

 

L1, L2 규제의 차이점과 ElasticNet까지, 회귀 모델의 규제 전략을 비교합니다

시리즈: 머신러닝 실전 완전 정복

6편: 선형 회귀 기초 7편: RANSAC과 다항 회귀 8편: 규제 기법

1. 왜 규제가 필요한가?

과적합(Overfitting)은 모델이 훈련 데이터의 노이즈까지 학습하여 새로운 데이터에서 성능이 떨어지는 현상입니다. 규제(Regularization)는 모델의 복잡도를 제한하여 과적합을 방지합니다.

과적합 vs 과소적합

  • 과적합: 훈련 오차 ↓, 검증 오차 ↑ (나쁨)
  • 과소적합: 훈련·검증 오차 모두 ↑ (나쁨)
  • 이상적: 훈련·검증 오차 모두 낮음

2. Ridge 회귀 (L2 규제)

Ridge는 비용 함수에 가중치의 제곱합을 페널티로 추가합니다. 모든 가중치를 균등하게 축소합니다.

비용 함수: J(w) = MSE(w) + α · Σ(w²)
from sklearn.linear_model import Ridge

ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
y_pred = ridge.predict(X_test)

Ridge의 특징

  • α(알파): 규제 강도 — 값이 클수록 강한 규제
  • 모든 가중치를 축소하지만 0으로 만들지 않음
  • 상관관계 높은 특성들을 균등하게 다룸

3. LASSO (L1 규제)

LASSO는 가중치의 절댓값 합을 페널티로 추가합니다. 중요하지 않은 특성의 가중치를 정확히 0으로 만들어 자동 특성 선택 효과를 냅니다.

비용 함수: J(w) = MSE(w) + α · Σ|w|
from sklearn.linear_model import Lasso

lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
print(lasso.coef_)  # 일부 가중치가 0

LASSO의 특징

  • 가중치를 정확히 0으로 축소 가능
  • 자동 특성 선택 (불필요한 특성 제거)
  • 해석 가능한 모델 생성
  • 높은 차원 데이터에 효과적

💡 팁: LASSO의 alpha 값을 늘리면 더 많은 가중치가 0이 됩니다. cross_val_score를 사용하여 최적 alpha를 찾을 수 있습니다.

4. ElasticNet (L1 + L2 혼합)

ElasticNet은 Ridge와 LASSO의 장점을 결합합니다. L1과 L2 규제를 함께 사용하여 유연한 모델을 만듭니다.

비용 함수: J(w) = MSE(w) + α · (ρ·Σ|w| + (1-ρ)·Σ(w²))
from sklearn.linear_model import ElasticNet

elanet = ElasticNet(alpha=1.0, l1_ratio=0.5)
elanet.fit(X_train, y_train)
y_pred = elanet.predict(X_test)

ElasticNet 파라미터

  • alpha: 규제 강도 (전체)
  • l1_ratio: L1과 L2의 비율
    • 0 = Ridge (L2만)
    • 0.5 = 균등 혼합
    • 1 = LASSO (L1만)

5. Ridge vs LASSO vs ElasticNet 비교

반응형

세 규제 기법의 성능과 특징을 비교하는 예제입니다.

ridge = Ridge(alpha=1.0)
lasso = Lasso(alpha=0.1)
elanet = ElasticNet(alpha=0.5, l1_ratio=0.5)

for name, model in [('Ridge', ridge),
                       ('LASSO', lasso),
                       ('ElasticNet', elanet)]:
    model.fit(X_train, y_train)
    train_mse = mean_squared_error(y_train, model.predict(X_train))
    test_mse = mean_squared_error(y_test, model.predict(X_test))
    r2 = r2_score(y_test, model.predict(X_test))
    print(f'{name} | Train MSE: {train_mse:.3f} | Test MSE: {test_mse:.3f} | R²: {r2:.3f}')

기법별 특징 비교표

특징 Ridge LASSO ElasticNet
규제 유형 L2 L1 L1+L2
가중치 축소 균등 감소 0으로 만듦 혼합
특성 선택 아니오 예 (약함)
고차원 데이터 양호 우수 우수

6. 어떤 규제를 언제 써야 하나?

선택 가이드

  • Ridge: 모든 특성이 중요할 때, 다중공선성 문제 해결
  • LASSO: 특성 선택이 필요할 때, 해석 가능한 모델 원할 때
  • ElasticNet: 특성 선택과 안정성 둘 다 필요할 때, 상관관계 높은 특성들이 있을 때
# 최적 alpha 찾기
from sklearn.linear_model import RidgeCV

ridge_cv = RidgeCV(alphas=[0.1, 1.0, 10.0])
ridge_cv.fit(X_train, y_train)
print(f'최적 alpha: {ridge_cv.alpha_}')

✓ 핵심 정리

  • 규제는 과적합을 방지하는 필수 기법
  • Ridge(L2): 모든 가중치를 균등 축소
  • LASSO(L1): 불필요한 특성을 0으로 제거
  • ElasticNet: 두 기법의 장점을 결합
  • CrossValidation으로 최적 규제 강도 선택

시리즈 완료! 선형 회귀부터 규제 기법까지 회귀 분석의 완전한 가이드였습니다.

반응형

댓글