데이터분석

앙상블 기법

장수우 2024. 11. 10. 17:37

1. 배깅 (Bagging)

배깅(Bootstrap Aggregating)은 데이터를 복원 추출로 여러 번 샘플링하여 각기 다른 서브셋으로 학습을 진행합니다.
각 모델은 독립적으로 학습하며, 최종 예측은 다수결 투표(분류) 또는 평균(회귀)을 통해 결합합니다.

 동작 원리

  1. 데이터 샘플링: 원본 데이터에서 복원 추출로 서브셋을 여러 개 생성합니다.
  2. 모델 학습: 각 서브셋으로 개별 모델을 학습시킵니다. 배깅에서는 주로 의사결정 트리와 같이 편향은 낮지만 분산이 높은 모델을 사용합니다.
  3. 예측 결합: 모든 모델의 예측을 결합하여 최종 결과를 도출합니다. 분류 문제에서는 다수결 투표 방식으로, 회귀 문제에서는 평균을 사용합니다.

 랜덤 포레스트 (Random Forest)

랜덤 포레스트는 배깅을 기반으로 한 대표적인 앙상블 알고리즘으로, 각 트리의 학습 시 특성의 일부만 무작위로 선택하여 학습에 사용합니다. 이로 인해 각 트리는 서로 다른 특성 조합으로 학습하여 상호 독립성이 높아집니다.

from sklearn.ensemble import RandomForestClassifier

# 랜덤 포레스트 모델 생성 및 학습
model = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)

 

  주요 하이퍼파라미터

  • n_estimators:
    트리의 개수로, 일반적으로 많을수록 성능이 좋아지지만 계산 비용이 증가합니다.
  • max_features:
    각 트리가 학습할 때 사용할 최대 특성 수를 설정합니다.
    일반적으로 'sqrt'는 분류 문제에서, 'log2'는 회귀 문제에서 자주 사용됩니다.
  • max_depth:
    트리의 최대 깊이로, 과적합을 방지하기 위해 조정할 수 있습니다.
  • min_samples_split:
    노드를 분할할 때 필요한 최소 샘플 수로, 과적합을 줄이는 데 도움을 줍니다.

 배깅의 활용법

배깅은 분산 감소를 통해 성능을 향상합니다.

모델이 여러 데이터를 학습하고 예측을 결합함으로써, 단일 모델보다 오차가 상쇄되고 예측이 더 안정적이 됩니다.

특히 고편향-저분산 모델을 사용할 때 배깅을 통해 모델이 전체 데이터의 특징을 잘 학습하도록 합니다.

장점

  • 과적합에 강하여 일반화 성능이 향상됩니다.
  • 데이터의 노이즈에 강합니다.

배깅의 단점

  • 개별 모델이 독립적이므로, 모델 개수가 많을수록 계산 비용이 많이 듭니다.

2. 부스팅 (Boosting)

부스팅은 여러 개의 약한 학습기를 순차적으로 학습시켜, 이전 모델의 오차를 다음 모델이 수정하도록 하는 기법입니다.

각 단계에서 잘못 예측된 데이터에 가중치를 높여 모델이 점차적으로 성능을 향상합니다.

 동작 원리

  1. 초기 모델 학습: 첫 번째 약한 학습기를 학습시키고, 잘못된 예측에 대해 가중치를 높입니다.
  2. 오차 수정: 다음 모델은 이전 모델의 오차를 보완하며 학습하고, 가중치를 조정합니다.
  3. 예측 결합: 모든 모델의 가중치를 합산하여 최종 예측을 만듭니다.

 부스팅 알고리즘

  1. AdaBoost (Adaptive Boosting):
    잘못 분류된 데이터 포인트에 가중치를 높여 후속 모델이 이를 보완하도록 합니다.
  2. Gradient Boosting:
    이전 모델의 오차를 계산하고, 그 오차를 보정하는 방식으로 학습을 진행합니다.
    잔여 오차에 대해 새로운 학습기를 순차적으로 추가해 성능을 개선합니다.
  3. XGBoost, LightGBM, CatBoost:
    Gradient Boosting을 기반으로 다양한 최적화 기법이 추가된 알고리즘들로, 특히 대규모 데이터에 효율적입니다.
from sklearn.ensemble import GradientBoostingClassifier

# 그라디언트 부스팅 모델 생성 및 학습
model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)

 주요 하이퍼파라미터

  • learning_rate:
    각 학습 단계에서 가중치 업데이트의 크기를 조정합니다. 일반적으로 낮은 learning_rate와 높은 n_estimators가 좋은 성능을 제공합니다.
  • n_estimators:
    약한 학습기의 개수입니다. 많을수록 성능이 좋아질 수 있지만 과적합 가능성이 있습니다.
  • max_depth:
    각 학습기의 최대 깊이로, 모델의 복잡성을 조정하여 과적합을 방지합니다.
  • subsample:
    각 단계에서 학습할 데이터의 비율로, 일반적으로 0.7~0.8을 사용하여 과적합을 방지합니다.
  • 부스팅은 편향을 줄이는 데 초점을 둡니다.
  • 이전 모델이 잘못 예측한 부분에 집중하며 학습이 진행되므로, 고편향-저분산 모델을 보완하는 데 유리합니다.
  • 예를 들어, XGBoost는 그리드 검색, 조기 종료 등을 통해 학습 효율성을 극대화할 수 있도록 개선되었습니다.

장점

  • 오차를 반복적으로 줄이기 때문에 높은 정확도를 기대할 수 있습니다.
  • 데이터가 비교적 작아도 높은 성능을 유지합니다.

부스팅의 단점

  • 과적합 가능성이 있으며, 정규화 파라미터를 잘 조정해야 합니다.
  • 연산 비용이 높아 학습 시간이 길어질 수 있습니다.

3. 스태킹 (Stacking)

스태킹(Stacking)은 여러 모델의 예측 결과를 메타 모델로 결합하여 최종 예측을 하는 기법입니다.

개별 모델들의 예측을 활용해 또 다른 모델을 학습시키는 방식입니다.

 동작 원리

  1. 1차 모델 학습: 개별 모델(기반 모델, base models)을 학습시킵니다.
  2. 메타 모델 학습: 개별 모델의 예측 결과를 특징으로 사용하여 메타 모델이 학습합니다.
  3. 최종 예측 결합: 메타 모델의 예측을 최종 결과로 사용합니다.
from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier

# 기본 모델 설정
estimators = [
    ('decision_tree', DecisionTreeClassifier(max_depth=5)),
    ('knn', KNeighborsClassifier(n_neighbors=5))
]

# 스태킹 모델 생성 및 학습
model = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression())
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)

 주요 하이퍼파라미터 및 설정

  • base models:
    여러 종류의 모델을 사용할 수 있으며, 서로 다른 특성을 가진 모델을 혼합하는 것이 좋습니다.
  • meta model:
    메타 모델은 보통 선형 회귀나 로지스틱 회귀를 사용하며, 개별 모델의 예측을 결합하여 최종 예측을 만듭니다.
  • 스태킹은 모델 다양성을 극대화하여 각 모델의 강점을 결합합니다.
  • 개별 모델이 서로 다른 예측 방식을 가지고 있어 오차 상쇄 효과가 발생할 수 있습니다.
  • 메타 모델이 개별 모델의 약점을 보완해 줍니다.
  • 스태킹은 앙상블 기법 중에서도 가장 유연성이 높고, 모델 성능을 극대화하는 데 매우 효과적입니다.

장점:

  1. 높은 예측 성능: 여러 모델의 결합으로 정확도가 높아지고 성능이 향상됩니다.
  2. 일반화 능력 향상: 개별 모델의 약점을 보완하여 과적합을 줄이고 일반화 성능을 높입니다.
  3. 다양한 모델 사용 가능: 배깅, 부스팅, 스태킹 등 다양한 방법으로 문제에 맞게 접근할 수 있습니다.

단점:

  1. 높은 계산 비용: 여러 모델을 학습시키기 때문에 연산 시간과 메모리 사용이 증가할 수 있습니다.
  2. 설정 복잡성 증가: 모델 최적화 및 하이퍼파라미터 조정이 복잡해질 수 있습니다.
  3. 해석 어려움: 앙상블 모델은 개별 모델에 비해 예측 과정이 복잡하여 결과 해석이 어려울 수 있습니다.
반응형

'데이터분석' 카테고리의 다른 글

연관분석  (2) 2024.11.10
군집 분석  (1) 2024.11.10
분류분석  (0) 2024.11.09
오분류 추정 및 확인  (0) 2024.11.09
데이터 분할 시 양이 충분하지 않은 경우  (1) 2024.11.08