Develop/ML·DL

앙상블 학습 및 랜덤 포레스트를 알아보자.

YOOZI. 2025. 1. 21. 22:41
728x90
여러 모델의 협력 학습

 

 

 

오늘은 앙상블 학습 및 랜덤 포레스트에 대해 알아보자.

오늘의 배움
  • 앙상블 학습의 기본 개념
  • 투표 기반 분류기와 배깅/페이스팅
  • 랜덤 포레스트와 부스팅 알고리즘

1. 앙상블 학습 및 랜덤 포레스트

앙상블 학습이란?

여러 개의 모델(약한 학습기)을 결합하여 하나의 강력한 모델을 만드는 방법

-> 여러 명의 전문가가 모여 의견을 모으는 것처럼, 다양한 모델의 예측을 결합하여 더 나은 결과를 도출하는 방법

 

📚 실제 예시로 이해하기
- 의사 진단: 여러 의사의 의견을 종합하여 최종 진단을 내리는 것
- 투자 결정: 다양한 전문가의 의견을 종합하여 투자 결정을 하는 것
- 주식 가격 예측: 여러 예측 모델의 결과를 종합하여 최종 예측
- 질병 진단: 다양한 검사 결과를 종합하여 진단

 


2. 핵심 개념 정리

 

  1. 투표 기반 분류기 (Voting Classifier)
    • 정의: 여러 분류기의 예측 결과를 투표로 결정 -> voting 기법
    • 특징:
      • 다수결 투표(Hard Voting): 각 분류기의 예측 중 다수결로 최종 클래스 선택
      • 확률 평균 투표(Soft Voting): 각 분류기가 예측한 확률값의 평균을 계산하여 가장 높은 확률의 클래스 선택
    • 예시: 로지스틱 회귀, 결정 트리, SVM 결합
  2. 배깅(Bootstrap Aggregating)과 페이스팅(Pasting)
    • 정의: 데이터 샘플링 방식으로 여러 모델 학습
    • 특징:
      • 베깅(Bagging): 데이터 샘플을 복원 추출하여 학습 데이터로 사용한다.
      • 페이스팅(Pasting): 데이터 샘플을 비복원 추출하여 학습 데이터로 사용한다.
    • 예시: 랜덤 포레스트의 기반이 되는 기술
  3. 부스팅
    • 정의: 순차적으로 모델을 개선하며 학습
    • 특징: 이전 모델의 오류를 보완
    • 예시:
      • AdaBoost: 이전 모델이 잘못 분류한 샘플에 더 많은 가중치를 부여
      • Gradient Boosting: 모델의 예측 오차(잔차)에 기반하여 다음 모델을 학습
      • XGBoost, LightGBM, CatBoost 등
  4. 랜덤 포레스트 (Random Forest)
    • 정의: 여러 개의 결정트리로 평균(또는 다수결)으로 결과 도출하는 방법
    • 특징:
      • 랜덤 패치(Random Patches) : 샘플과 특성 모두를 랜덤하게 선택하여 학습
      • 랜덤 서브스페이스(Random Subspaces) : 전체 데이터를 사용하지만, 특성의 일부만 무작위로 선택하여 학습
    • 장점: 과대 적합 방지, 모델 다양성 증가에 유리
  5. 스태킹 (Stacking)
    • 정의: 여러 모델의 예측값으로 새로운 모델 학습
    • 특징: 각 모델의 강점을 결합하여 성능 극대화함
# 랜덤 포레스트
from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(n_estimators=100)
rf_clf.fit(X_train, y_train)

 

# Gradient Boosting
from sklearn.ensemble import GradientBoostingClassifier

gb_clf = GradientBoostingClassifier(n_estimators=100)
gb_clf.fit(X_train, y_train)
# 스태킹
from sklearn.ensemble import StackingClassifier

stacking_clf = StackingClassifier(
    estimators=[('rf', RandomForestClassifier()),
                ('gb', GradientBoostingClassifier())],
    final_estimator=LogisticRegression()
)

 


[참고] Boosting model

더보기

1. GBM (Gradient Boosting Machine)

가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식이다.

  • 첫 번째 모델이 예측을 하고, 거기서 틀린 것을 가지고 그 다음 모델이 그 틀린 것을 개선을 시킨다.
  • 그리고 이 모델이 또 학습으로 인해서 나온 결과 중에 잘못된 것을 그 다음 모델이 개선을 시키는 방식으로 만드는 것이 부스팅 방식이다.

 

2.XGBoost란

트리 기반의 앙상블 학습에서 가장 인기 있는 모델 중 하나.

  • 장점: 다른 모델 대비 성능이 매우 좋다.
  • 단점: 성능이 좋은 만큼 파라미터가 늘어나면 속도가 늦어진다.

⇒ 다른 모델에 비해 압도적 성능을 보이므로 단점을 감안하고 사용한다. (결과를 좌우하는 중요한 지표들을 XGBoost가 찾아준다.)

https://xgboost.readthedocs.io/en/stable/index.html

 

 

[ 주요 부스터 파라미터 ]

  1. learning-rate : 0에서 1 사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행할 때 업데이트 되는 학습률 값이다. 기본값은 0.1이고 보통은 0.01~0.2 사이의 값을 선호한다.
  2. max-depth : 트리 기반 알고리즘의 max_depth와 같은 것으로, 해당 값이 높으면 과적합 가능성이 높아지므로 보통 3~10 사이의 값을 적용한다.
  3. n-estimators : 학습을 몇 번 시킬지 결정한다.
  4. sub sample : 트리가 커져서 과적합되는 것을 제어하기 위해 데이터의 샘플링 비율을 지정한다. 0~1 사이의 값을 지정 가능하고 기본값은 0.5이다. 한 번 트리를 돌릴때마다의 샘플 비율을 의미한다.
  • 최적의 파라미터를 자동으로 찾아주는 Optuna와 같은 라이브러리를 활용할 수 있다.

[ 학습 태스크 파라미터 ]

  1. objective : 최솟값을 가져야 할 손실 함수를 정의한다. 주로 사용되는 손실함수는 이진 분류인지 다중 분류인지에 따라 달라진다.
  2. (이진분류 ‘binary:logistic’, 다중분류 ‘multi:softmax’)
  3. eval_metrix : 검증에 사용되는 함수를 정의한다. 기본값은 회귀인 경우 rmse, 분류일 경우 error이다. 로스값을 관측할 수 있는 수치적인 기법들이 몇가지 있는데 아래와 같다.
    1. rmse : Root Mean Square Error
    2. mae : Mean Absolute Error
    3. logloss : Negative log-likelihood
    4. error : Binary classification error rate (0.5 threshold)
    5. merror : Multiclass classification error rate
    6. mlogloss : Multiclass logloss
    7. auc : Area under the curve

 

3. LightGBM이란

LightGBM은 학습시간이 오래 걸리는 XGBoost의 단점을 보완하기 위해서 나온 모델이다.

  • LightGBM는 XGBoost보다 학습에 걸리는 시간이 훨씬 적고, 메모리 사용량도 적다는 장점이 있다.

 


 

 

🤓 학습 느낀점

  1. 이해하기 어려웠던 부분: 각 앙상블 방법의 세부적인 차이점
  2. 흥미로웠던 부분: 여러 모델을 결합하여 성능을 높일 수 있다는 점
  3. 추가 학습 필요: 각 모델의 하이퍼파라미터 튜닝
  4. 다음 학습 계획: 실제 데이터셋으로 앙상블 모델 구현해보기
728x90