
선형 회귀의 정규화, Lasso, Ridge는 모두 과적합을 방지하고 모델의 성능을 개선하기 위한 기법입니다. 이 방법들은 회귀 모델의 복잡성을 제어함으로써 모델의 일반화 능력을 높이는 데 사용됩니다.
정규화는 회귀 계수들의 크기를 제한하여 모델의 복잡도를 낮추고, 이를 통해 과적합을 방지하는 기법입니다.
기본 선형 회귀 모델은 다음과 같은 형태를 가집니다:
여기서 정규화는 패널티 항(규제항)을 추가하여 회귀 계수들이 너무 커지는 것을 방지합니다. 주로 두 가지 방식의 정규화가 있습니다: L1 규제(Lasso)와 L2 규제(Ridge).
Ridge 회귀는 L2 정규화라고도 불리며, 회귀 계수들의 제곱합에 패널티를 부과하여 모델을 규제합니다.
Lasso 회귀는 L1 정규화라고 불리며, 회귀 계수들의 절대값 합에 패널티를 부과합니다. 이를 통해 일부 계수는 정확히 0이 됩니다.
| 특징 | Ridge (L2 정규화) | Lasso (L1 정규화) |
|---|---|---|
| 패널티 항 | ||
| 목적 | 모든 피처의 가중치를 줄이기 | 중요하지 않은 피처의 가중치를 0으로 만듦 |
| 사용 사례 | 피처가 많고, 모두가 중요할 가능성이 있을 때 | 피처가 많고, 그중 일부만 중요할 때 |
| 회귀 계수 | 계수가 0에 가까워짐, 절대 0이 되지 않음 | 일부 계수가 0이 되어 특성 선택 가능 |
Elastic Net은 Ridge와 Lasso를 혼합한 기법으로, L1과 L2 규제를 동시에 사용합니다.
Elastic Net은 Lasso와 Ridge의 장점을 결합하여, 불필요한 피처는 제거하고 나머지 피처는 적절하게 규제할 수 있습니다.
from sklearn.linear_model import Ridge, Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Ridge 회귀
ridge_model = Ridge(alpha=1.0) # alpha = lambda
ridge_model.fit(X_train, y_train)
ridge_pred = ridge_model.predict(X_test)
ridge_mse = mean_squared_error(y_test, ridge_pred)
print(f'Ridge MSE: {ridge_mse}')
# Lasso 회귀
lasso_model = Lasso(alpha=1.0) # alpha = lambda
lasso_model.fit(X_train, y_train)
lasso_pred = lasso_model.predict(X_test)
lasso_mse = mean_squared_error(y_test, lasso_pred)
print(f'Lasso MSE: {lasso_mse}')