Table of Contents

ML

Lasso L1 정규화

꼬꼬마코더 2024. 7. 18. 17:11
728x90

Lasso (L1 정규화)와 랜덤 포레스트를 함께 사용하는 것은 일반적인 방법 중 하나입니다. Lasso를 사용하여 특성 선택을 먼저 수행하고, 그 후에 선택된 중요한 특성들만을 사용하여 랜덤 포레스트와 같은 복잡한 모델을 학습하는 방식입니다. 이 방법은 모델의 복잡도를 줄이고, 과적합을 방지하며, 해석 가능성을 높이는 데 도움이 됩니다.

단계별 접근 방법

  1. Lasso를 사용하여 특성 선택:
    먼저 Lasso 회귀를 사용하여 중요한 특성을 선택합니다. Lasso는 L1 정규화로 인해 일부 특성의 가중치를 0으로 만들기 때문에, 중요한 특성만을 남기게 됩니다.

  2. 랜덤 포레스트를 사용하여 예측 모델 생성:
    선택된 중요한 특성을 사용하여 랜덤 포레스트 모델을 학습합니다. 랜덤 포레스트는 여러 개의 결정 트리를 결합하여 높은 예측 성능을 발휘하는 앙상블 기법입니다.

예제 코드

import numpy as np
import pandas as pd
from sklearn.linear_model import Lasso
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 데이터 로드 및 분할
# 데이터 프레임 df에 특성 X와 타겟 y가 있다고 가정
X = df.drop('target', axis=1)
y = df['target']

X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)

# Lasso를 사용하여 중요한 특성 선택
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)

# 중요하지 않은 특성 제거
selected_features = X_train.columns[(lasso.coef_ != 0)]
X_train_selected = X_train[selected_features]
X_valid_selected = X_valid[selected_features]

# 랜덤 포레스트 모델 학습
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train_selected, y_train)

# 예측 및 평가
y_pred = rf.predict(X_valid_selected)
mse = mean_squared_error(y_valid, y_pred)
print(f'Mean Squared Error: {mse}')

# 최종 모델을 전체 데이터로 학습
X_selected = X[selected_features]
rf.fit(X_selected, y)

주의사항

  • 하이퍼파라미터 튜닝: Lasso와 랜덤 포레스트 모두 하이퍼파라미터가 있으며, 교차 검증을 통해 최적의 값을 찾아야 합니다. 예를 들어, Lasso의 alpha 값과 랜덤 포레스트의 n_estimators 등을 조절해야 합니다.
  • 데이터 스케일링: Lasso는 데이터의 스케일에 민감하므로, 특성 스케일링(예: StandardScaler 또는 MinMaxScaler)을 수행하는 것이 좋습니다.
  • 데이터셋의 크기와 특성: 데이터셋의 크기와 특성의 수에 따라 모델 선택과 튜닝이 달라질 수 있습니다. 작은 데이터셋에서는 Lasso의 영향이 클 수 있으며, 큰 데이터셋에서는 랜덤 포레스트의 성능이 중요할 수 있습니다.

이 방법을 통해 중요한 특성을 선택하고, 복잡한 모델을 사용하여 더 나은 예측 성능을 얻을 수 있습니다.