반응형

1. Lasso 회귀 개요 (L1 Regularization)
Lasso 회귀는 선형회귀에 L1 규제를 적용한 모델입니다.
L1 규제는 회귀계수 WW의 절대값 합에 패널티를 부여합니다.
✔ Lasso 비용 함수
Cost(W)=RSS(W)+α⋅∥W∥1\text{Cost}(W) = RSS(W) + \alpha \cdot \|W\|_1
- RSS(W): 예측값과 실제값의 잔차 제곱합
- ∥W∥1\|W\|_1: 회귀계수 절대값의 합
- α\alpha: 규제 강도
✔ Lasso의 핵심 특징
- L2(Ridge)는 계수를 작게 만들지만
- L1(Lasso)는 중요하지 않은 계수를 0으로 만듦
- 즉, 자동 피처 선택(Feature Selection) 효과를 가짐
- 고차원 데이터나 불필요한 피처가 많은 경우 유리
사이킷런에서는 Lasso 클래스를 통해 Lasso 회귀를 제공합니다.
2. 공통 평가 함수 정의 (Ridge / Lasso / ElasticNet)
아래 함수는 규제 회귀 모델을 공통적으로 평가하기 위한 유틸리티 함수입니다.
from sklearn.linear_model import Lasso, ElasticNet, Ridge
from sklearn.model_selection import cross_val_score
import pandas as pd
import numpy as np
# 모델별(alpha 값별) 5-Fold RMSE 평가 및 회귀계수 반환 함수
def get_linear_reg_eval(model_name, params=None, X_data_n=None, y_target_n=None,
verbose=True, return_coeff=True):
"""
[목적]
- Ridge / Lasso / ElasticNet 회귀 모델에 대해
alpha 값 변화에 따른 성능(RMSE)과 회귀계수 변화를 비교
[주요 기능]
1. alpha 값별로 모델 학습
2. 5-Fold 교차검증 RMSE 계산
3. 전체 데이터로 재학습 후 회귀계수 저장
"""
coeff_df = pd.DataFrame()
if verbose:
print('####### ', model_name , '#######')
for param in params:
# 모델 선택
if model_name == 'Ridge':
model = Ridge(alpha=param)
elif model_name == 'Lasso':
model = Lasso(alpha=param)
elif model_name == 'ElasticNet':
model = ElasticNet(alpha=param, l1_ratio=0.7)
# 5-Fold 교차검증 (MSE → RMSE 변환)
neg_mse_scores = cross_val_score(
model,
X_data_n,
y_target_n,
scoring="neg_mean_squared_error",
cv=5
)
avg_rmse = np.mean(np.sqrt(-1 * neg_mse_scores))
print(f'alpha {param}일 때 5 폴드 세트의 평균 RMSE: {avg_rmse:.3f}')
# 회귀계수 확인을 위해 전체 데이터로 재학습
model.fit(X_data_n, y_target_n)
if return_coeff:
coeff = pd.Series(model.coef_, index=X_data_n.columns)
colname = 'alpha:' + str(param)
coeff_df[colname] = coeff
return coeff_df
핵심 포인트
- cross_val_score는 성능만 반환하므로
→ 계수 확인을 위해 재학습이 필요 - 동일한 방식으로 Ridge / Lasso / ElasticNet 비교 가능
3. Lasso 회귀 실습
3-1. alpha 값별 성능 평가
# Lasso에서 사용할 alpha 값들
lasso_alphas = [0.07, 0.1, 0.5, 1, 3]
# Lasso 회귀 평가
coeff_lasso_df = get_linear_reg_eval(
'Lasso',
params=lasso_alphas,
X_data_n=X_data,
y_target_n=y_target
)
alpha 0.07일 때 5 폴드 세트의 평균 RMSE: 5.612
alpha 0.1일 때 5 폴드 세트의 평균 RMSE: 5.615
alpha 0.5일 때 5 폴드 세트의 평균 RMSE: 5.669
alpha 1일 때 5 폴드 세트의 평균 RMSE: 5.776
alpha 3일 때 5 폴드 세트의 평균 RMSE: 6.189
해석
- alpha 증가 → 규제 강화 → 성능 점진적 저하
- 너무 큰 alpha는 과소적합(Underfitting) 유발
3-2. Lasso 회귀계수 확인 (Feature Selection 효과)
# 가장 작은 alpha 기준으로 계수 정렬
sort_column = 'alpha:' + str(lasso_alphas[0])
coeff_lasso_df.sort_values(by=sort_column, ascending=False)
중요 관찰
- alpha가 커질수록 많은 피처의 회귀계수가 0
- 실제로 모델에서 해당 피처가 제거됨
- Lasso = 성능 + 해석력 확보
4. ElasticNet 회귀 개요
ElasticNet 회귀는 L1 + L2 규제를 결합한 모델입니다.
✔ ElasticNet 비용 함수
Cost(W)=RSS(W)+α1∥W∥1+α2∥W∥22\text{Cost}(W) = RSS(W) + \alpha_1 \|W\|_1 + \alpha_2 \|W\|_2^2
- L1 규제: 피처 선택
- L2 규제: 계수 안정화
✔ ElasticNet이 필요한 이유
- Lasso는 상관관계 높은 피처 중 하나만 선택하는 경향
- alpha 변화에 따라 계수가 급격히 변동 가능
- ElasticNet은 L2를 추가해 계수 변동을 완화
사이킷런에서는 ElasticNet(alpha, l1_ratio) 사용
- alpha = 전체 규제 강도
- l1_ratio = L1 비율 (예: 0.7 → L1 70%, L2 30%)
5. ElasticNet 회귀 실습
# ElasticNet에서 사용할 alpha 값들
elastic_alphas = [0.07, 0.1, 0.5, 1, 3]
coeff_elastic_df = get_linear_reg_eval(
'ElasticNet',
params=elastic_alphas,
X_data_n=X_data,
y_target_n=y_target
)
alpha 0.07일 때 5 폴드 세트의 평균 RMSE: 5.542
alpha 0.1일 때 5 폴드 세트의 평균 RMSE: 5.526
alpha 0.5일 때 5 폴드 세트의 평균 RMSE: 5.467
alpha 1일 때 5 폴드 세트의 평균 RMSE: 5.597
alpha 3일 때 5 폴드 세트의 평균 RMSE: 6.068
해석
- 중간 alpha(≈0.5)에서 가장 좋은 성능
- Lasso보다 안정적인 성능 곡선
5-1. ElasticNet 회귀계수 확인
sort_column = 'alpha:' + str(elastic_alphas[0])
coeff_elastic_df.sort_values(by=sort_column, ascending=False)
특징 요약
- 일부 계수는 0 (L1 효과)
- 나머지는 완만하게 축소 (L2 효과)
- 피처 선택 + 안정성 동시 확보
6. 전체 정리
| 모델 | 규제방식 | 특징 | 적합한 상황 |
| Ridge | L2 | 계수 축소 | 다중공선성 |
| Lasso | L1 | 계수 0 → 피처 선택 | 고차원, 해석 |
| ElasticNet | L1 + L2 | 안정적 피처 선택 | 상관 피처 다수 |
✔ 실무 권장 순서
Ridge → Lasso → ElasticNet 비교 후 선택
반응형
'Programming' 카테고리의 다른 글
| 로지스틱 회귀와 회귀 트리 기반 모델 이해 (0) | 2026.01.05 |
|---|---|
| 선형회귀 모델을 위한 데이터 변환 전략 정리 (0) | 2026.01.05 |
| 규제 선형회귀(Regularized Linear Regression)와 Ridge 회귀 실습 (1) | 2026.01.05 |
| 다항 회귀를 이용한 과소적합과 과적합 이해 (0) | 2026.01.05 |
| 다항 회귀(Polynomial Regression)를 이용한 보스턴 주택가격 예측 (1) | 2026.01.05 |