엘라스틱넷(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)의 장점을 결합하여, 변수 선택과 정규화를 동시에 수행하는 모델입니다.
라쏘의 단점(불안정성)을 보완하면서도, 불필요한 변수는 제거하고 중요한 변수는 유지하는 균형 잡힌 방식을 제공합니다. 🚀