반응형

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으로 최적 규제 강도 선택
시리즈 완료! 선형 회귀부터 규제 기법까지 회귀 분석의 완전한 가이드였습니다.
반응형
'정보 > IT 지식 정보' 카테고리의 다른 글
| 계층적 군집과 DBSCAN — K-Means를 넘어서는 클러스터링 [10편] (0) | 2026.04.07 |
|---|---|
| K-Means 클러스터링이란? 엘보우 방법과 실루엣 분석까지 [9편] (0) | 2026.04.06 |
| RANSAC과 다항 회귀 — 이상치와 비선형 관계 다루기 [7편] (0) | 2026.04.04 |
| 선형 회귀란? 경사 하강법으로 직접 구현하기 [6편] (0) | 2026.04.03 |
| 배깅 vs 부스팅 — 결정 트리의 과적합을 잡는 두 전략[5편] (0) | 2026.04.03 |
댓글