Table of Contents

ML

Ensemble 앙상블

꼬꼬마코더 2024. 5. 29. 12:41
728x90

앙상블(Ensemble)은 여러 개의 학습 모델을 결합하여 더 나은 예측 성능을 도출하는 머신러닝 기법입니다. 개별 모델의 약점을 보완하고, 모델의 예측을 종합함으로써 성능을 향상시키는 것을 목표로 합니다. 앙상블 기법은 다양한 모델을 조합하여 더욱 강력하고 견고한 예측을 가능하게 합니다.

주요 앙상블 기법

  1. 배깅(Bagging)
    • 배깅은 Bootstrap Aggregating의 줄임말로, 여러 개의 모델을 독립적으로 학습시킨 후 그 결과를 평균 내거나 다수결 투표를 통해 결합하는 방법입니다.
    • 각 모델은 원래 데이터셋에서 부트스트랩 샘플링(복원 추출)을 통해 생성된 여러 데이터셋에서 학습됩니다.
    • 대표적인 예: 랜덤 포레스트(Random Forest)
  2. 부스팅(Boosting)
    • 부스팅은 여러 약한 학습기(weak learner)를 순차적으로 학습시키고, 각 단계에서 이전 단계의 오류를 보완하는 방식입니다.
    • 이전 모델이 잘못 예측한 데이터 포인트에 더 큰 가중치를 부여하여 다음 모델이 이를 더 잘 학습하도록 합니다.
    • 대표적인 예: AdaBoost, Gradient Boosting Machines(GBM), XGBoost, LightGBM, CatBoost
  3. 스태킹(Stacking)
    • 스태킹은 서로 다른 종류의 여러 모델을 학습시킨 후, 이들의 예측을 새로운 데이터셋으로 사용하여 메타 모델(meta-model)을 학습시키는 방법입니다.
    • 각 개별 모델의 예측 결과를 입력 특성으로 사용하여 최종 예측을 수행하는 메타 모델을 학습합니다.
  4. 투표(Voting)
    • 여러 모델의 예측 결과를 다수결 투표를 통해 최종 예측을 결정하는 방법입니다.
    • 하드 보팅(hard voting): 각 모델의 예측 클래스 중 가장 많이 나온 클래스를 최종 예측으로 선택.
    • 소프트 보팅(soft voting): 각 모델의 클래스 확률을 평균 내어 가장 높은 확률을 가진 클래스를 최종 예측으로 선택.

주요 앙상블 모델

  1. 랜덤 포레스트(Random Forest)
    • 여러 개의 결정 트리를 배깅 방식으로 결합한 모델입니다.
    • 각 트리는 데이터의 무작위 샘플링과 특징의 무작위 선택을 통해 학습됩니다.
    • 높은 예측 성능과 안정성을 가집니다.
  2. AdaBoost (Adaptive Boosting)
    • 약한 학습기를 순차적으로 학습시키며, 이전 학습기에서 잘못 예측한 데이터 포인트에 가중치를 부여합니다.
    • 최종 예측은 모든 약한 학습기의 가중치가 부여된 예측을 결합하여 결정합니다.
  3. Gradient Boosting Machines (GBM)
    • 이전 모델의 잔여 오류(residual)를 학습하여 점진적으로 성능을 향상시키는 부스팅 방법입니다.
    • 각 단계에서 모델은 이전 단계의 오류를 보완하도록 학습됩니다.
  4. XGBoost
    • GBM의 효율성을 높인 버전으로, 빠른 학습 속도와 높은 성능을 제공합니다.
    • 정규화(term regularization)를 포함하여 과적합을 방지합니다.
  5. LightGBM
    • 대규모 데이터셋에 효율적인 부스팅 방법으로, 트리 기반 학습을 최적화하여 빠른 학습 속도를 제공합니다.
    • 리프 중심 트리 분할 방식을 사용합니다.
  6. CatBoost
    • 범주형 데이터를 처리하는 데 최적화된 부스팅 방법입니다.
    • 자동으로 범주형 데이터를 인코딩하고, 학습 속도와 성능을 최적화합니다.

장점

  • 향상된 예측 성능: 개별 모델보다 높은 정확도를 제공합니다.
  • 안정성: 단일 모델보다 더 견고하고 일관된 성능을 제공합니다.
  • 과적합 감소: 여러 모델의 예측을 결합하여 과적합 위험을 줄입니다.

단점

  • 복잡성: 모델이 복잡해지고, 해석이 어려울 수 있습니다.
  • 계산 비용: 여러 모델을 학습시키고 결합하는 과정에서 계산 비용이 증가합니다.
  • 시간 소모: 학습과 예측에 필요한 시간이 증가할 수 있습니다.

코드 예시

앙상블 모델의 간단한 구현 예시로 랜덤 포레스트를 사용해 보겠습니다.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 데이터 로드 및 분할
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# 랜덤 포레스트 모델 생성
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)

# 예측 및 평가
y_pred = clf.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

이 코드는 사이킷런(Scikit-learn)을 사용하여 간단한 랜덤 포레스트 모델을 학습시키고, 예측 성능을 평가하는 예제입니다. 앙상블 기법을 통해 더 나은 예측 성능을 도출할 수 있습니다.