728x90
반응형
SMALL
앞선 글에서는 다중 선형 회귀 모델을 구현하고 평가하는 방법에 대해 알아보았습니다.
이번 글에서는 실제 프로젝트에서 더 좋은 예측 결과를 얻기 위해 자주 사용되는 회귀 모델 성능 개선 기법들을 소개해 드리겠습니다.
1️⃣ 특성 선택 (Feature Selection)
모델에 사용되는 특성(Feature)이 많다고 해서 무조건 성능이 좋아지는 것은 아닙니다.
오히려 불필요한 특성이 포함되면 예측 정확도가 떨어지거나 과적합(overfitting)이 발생할 수 있습니다.
따라서 중요한 변수만 남기고 불필요한 특성은 제거하는 것이 중요합니다.
📌 대표적인 특성 선택 방법
- 상관 계수 분석: 타겟과 상관관계가 약한 특성을 제거합니다.
- VIF (Variance Inflation Factor): 다중공선성이 높은 특성을 제거합니다.
- RFE (Recursive Feature Elimination): 모델을 반복적으로 학습하여 덜 중요한 특성을 제거합니다.
📌 실습: 상관 계수 기반 특성 선택
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 데이터 생성
np.random.seed(42)
X1 = np.random.rand(100, 1) * 10 # 방 개수
X2 = np.random.rand(100, 1) * 100 # 평수
X3 = np.random.rand(100, 1) * 50 # 의미 없는 랜덤 변수
y = 50 + 5 * X1 + 2 * X2 + np.random.randn(100, 1) * 5 # 주택 가격
# 데이터프레임 구성
df = pd.DataFrame(np.hstack([X1, X2, X3, y]), columns=["Rooms", "Size", "RandomFeature", "Price"])
# 상관 계수 시각화
corr_matrix = df.corr()
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm")
plt.title("Correlation Matrix")
plt.show()
해석: RandomFeature가 Price와 거의 관련이 없다면, 해당 특성은 제거하는 것이 좋습니다.
2️⃣ 정규화 (Regularization)
정규화(Regularization)는 모델이 너무 복잡해져 학습 데이터에만 과하게 맞춰지는 현상, 즉 과적합(overfitting)을 방지해주는 기법입니다.
📌 대표적인 정규화 방법
- Lasso 회귀 (L1 정규화): 불필요한 특성의 가중치를 0으로 만들어 자동으로 특성을 제거합니다.
- Ridge 회귀 (L2 정규화): 너무 큰 가중치를 억제하여 모델의 안정성을 높입니다.
📌 실습: Lasso 및 Ridge 회귀 적용
from sklearn.linear_model import Ridge, Lasso
from sklearn.metrics import mean_squared_error
# 데이터 준비
X = df[["Rooms", "Size", "RandomFeature"]]
y = df["Price"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Ridge 회귀
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
y_pred_ridge = ridge.predict(X_test)
ridge_mse = mean_squared_error(y_test, y_pred_ridge)
# Lasso 회귀
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
y_pred_lasso = lasso.predict(X_test)
lasso_mse = mean_squared_error(y_test, y_pred_lasso)
print(f"Ridge MSE: {ridge_mse:.2f}")
print(f"Lasso MSE: {lasso_mse:.2f}")
Tip: Lasso는 불필요한 변수를 0으로 만들기 때문에, 자동으로 특성 선택을 수행하는 효과가 있습니다.
3️⃣ 다항 회귀 (Polynomial Regression)
기존의 선형 회귀는 입력 변수와 출력 변수 간의 직선 관계만을 모델링합니다.
하지만 실제 데이터는 비선형 관계를 가지는 경우가 많습니다.
이럴 때는 다항 회귀(Polynomial Regression)를 활용하여 비선형성을 반영할 수 있습니다.
📌 실습: 다항 회귀 모델 적용
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
# 다항 회귀 (2차 다항식 적용)
poly_model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())
poly_model.fit(X_train, y_train)
y_pred_poly = poly_model.predict(X_test)
poly_mse = mean_squared_error(y_test, y_pred_poly)
print(f"Polynomial Regression MSE: {poly_mse:.2f}")
참고: PolynomialFeatures를 통해 기존 입력 특성들 간의 제곱이나 곱 형태의 새로운 특성들이 추가됩니다.
🏆 오늘의 핵심 요약
항목 | 요약 |
✅ 특성 선택 | 의미 없는 변수를 제거하면 모델 성능이 향상됩니다. |
✅ 정규화 | Lasso, Ridge 회귀를 사용하면 과적합을 방지할 수 있습니다. |
✅ 다항 회귀 | 데이터가 선형이 아닐 때, 곡선 형태로 모델링할 수 있습니다. |
728x90
반응형
LIST
'인공지능 (AI) > 머신러닝 (ML)' 카테고리의 다른 글
6 - 숫자부터 문자까지, 분류의 확장: 다중 클래스 분류와 소프트맥스 회귀 (0) | 2025.04.03 |
---|---|
5 - 분류의 시작: 로지스틱 회귀와 시그모이드 함수 (0) | 2025.04.03 |
3 - 예측을 더 정밀하게: 다중 선형 회귀 (0) | 2025.04.03 |
2 - 숫자로 미래를 그리다: 선형 회귀 (0) | 2025.04.03 |
1 - 데이터가 스스로 배우는 세상: 머신러닝 개요 (0) | 2025.04.03 |