엘라스틱넷 (Elastic Net)

엘라스틱넷(Elastic Net) 회귀릿지 회귀(Ridge)와 라쏘 회귀(Lasso)의 장점을 결합한 모델입니다.
즉, L1 정규화(라쏘)와 L2 정규화(릿지)를 동시에 적용하여 변수 선택과 가중치 축소를 함께 수행합니다.

1. 엘라스틱넷의 핵심 개념

  • 릿지 회귀처럼 모든 변수의 가중치를 줄이면서도(L2) 라쏘 회귀처럼 일부 변수를 0으로 만들어 제거(L1) 가능
  • 다중 공선성이 높은 데이터에서 불안정한 라쏘의 단점을 보완
  • 고차원 데이터에서 변수 선택과 정규화를 동시에 수행

2. 엘라스틱넷 회귀 수식

엘라스틱넷은 L1 정규화(라쏘)와 L2 정규화(릿지)를 결합한 형태로, 다음과 같은 손실 함수를 사용합니다.

  • 첫 번째 항: 일반적인 선형 회귀의 손실 함수 (MSE)
  • 두 번째 항 (L1 정규화): 일부 계수를 0으로 만들어 변수 선택 효과 제공 (라쏘)
  • 세 번째 항 (L2 정규화): 모든 계수를 작게 조정하여 다중 공선성을 해결 (릿지)
  • λ1 ​과 λ2 ​: 각각 L1과 L2 정규화의 강도를 조절하는 하이퍼파라미터

3. 엘라스틱넷의 특징

릿지와 라쏘의 장점 결합

  • 라쏘처럼 불필요한 변수를 자동으로 제거
  • 릿지처럼 모든 변수의 가중치를 적절하게 조절하여 과적합 방지

다중 공선성이 있는 데이터에서 안정적

  • 다중 공선성이 심한 경우 라쏘는 일부 변수만 선택하는데, 엘라스틱넷은 좀 더 균형 잡힌 선택을 함

변수 선택과 정규화 효과를 동시에 적용

  • 데이터에 따라 L1과 L2의 비율을 조정 가능 (α\alphaα 값으로 설정)
    • α=1\alpha = 1α=1: 라쏘와 동일 (L1 정규화만 적용)
    • α=0\alpha = 0α=0: 릿지와 동일 (L2 정규화만 적용)
    • 0<α<10 < \alpha < 10<α<1: L1과 L2 정규화를 조합한 효과

4. 릿지 vs. 라쏘 vs. 엘라스틱넷 비교

비교 항목릿지 (Ridge)라쏘 (Lasso)엘라스틱넷 (Elastic Net)
정규화 방식L2 정규화 (∑β2\sum \beta^2∑β2)L1 정규화 ((\sum\beta
과적합 방지✅ 가능✅ 가능✅ 가능
변수 선택 기능❌ 없음 (모든 변수 유지)✅ 있음 (일부 계수 0)✅ 있음 (라쏘보다 더 안정적)
다중 공선성 해결✅ 효과적❌ 불안정할 수 있음✅ 효과적
사용 추천 상황모든 변수를 유지하고 싶을 때변수 선택이 필요한 경우고차원 데이터에서 변수 선택 + 정규화가 모두 필요할 때

💡 📌 핵심 차이점:

  • 릿지는 모든 변수를 유지하지만 가중치를 작게 조정
  • 라쏘는 일부 변수를 완전히 제거하여 변수 선택 기능 제공
  • 엘라스틱넷은 라쏘의 변수 선택 기능을 유지하면서도, 릿지처럼 안정성을 높임

5. 엘라스틱넷 회귀 예제 (Python)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

# 데이터 생성
X, y = make_regression(n_samples=100, n_features=10, noise=10, random_state=42)

# 훈련/테스트 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 엘라스틱넷 모델 학습
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5) # L1과 L2 정규화 혼합
elastic_net.fit(X_train, y_train)

# 회귀 계수 확인
print("Elastic Net 회귀 계수:", elastic_net.coef_)

# 중요하지 않은 변수는 계수가 0이 될 가능성이 있음
plt.bar(range(len(elastic_net.coef_)), elastic_net.coef_)
plt.xlabel("Feature Index")
plt.ylabel("Coefficient Value")
plt.title("Elastic Net Regression Coefficients")
plt.show()

📌 라쏘처럼 일부 계수가 0이 되고, 릿지처럼 모든 변수를 조절하는 효과를 볼 수 있음!

6. 엘라스틱넷을 사용하는 경우

고차원 데이터에서 변수 선택과 정규화가 동시에 필요할 때
라쏘의 변수 선택 기능을 원하지만 불안정성을 해결하고 싶을 때
릿지보다 더 강력한 변수 선택 기능을 원할 때
데이터에 다중 공선성이 존재할 때

7. 결론: 한 줄 요약

엘라스틱넷(Elastic Net) 회귀릿지(L2)와 라쏘(L1)의 장점을 결합하여, 변수 선택과 정규화를 동시에 수행하는 모델입니다.
라쏘의 단점(불안정성)을 보완하면서도, 불필요한 변수는 제거하고 중요한 변수는 유지하는 균형 잡힌 방식을 제공합니다. 🚀

Leave a Comment