본문 바로가기
Machine Learning

머신러닝 앙상블(Ensemble)

by wanttosleep1111 2023. 3. 20.

머신러닝 앙상블(Ensemble)

 

앙상블 : 여러 개의 모델이 예측한 값을 결합하여 정확한 최종 예측을 도출하는 기법

 

앙상블을 사용하는 이유

  • 단일 모델에 비해 높은 성능과 신뢰성을 얻음
  • 데이터의 양이 적은 것에 대비하여 충분한 학습 효과 가능

앙상블 방법

  • 보팅(Voting)
    여러 개의 다른 종류의 모델이 예측한 결과를 투표 혹은 평균을 통해 최종 선정
  • 베깅(Bagging)
    여러 개의 같은 종류의 모델이 예측한 결과를 투표 혹은 평균을 통해 최종 선정
  • 부스팅(Boosting)
    여러 개의 같은 종류의 모델이 순차적으로 학습-예측하여 오류를 개선하는 방식

 


 

1. 보팅(Voting)

    • 하드 보팅(Hard voting) : 다수결
    • 소프트 보팅(Soft voting) : 각 확률의 평균
      (일반적으로 소프트 보팅의 예측 성능이 상대적으로 우수하여 주로 사용)

 

 

  • 회귀 모델은 각 모델들이 예측한 수치값의 평균을 통해 최종 예측

 


 

2. 베깅(Bagging)

  • 보팅과 베깅의 공통점 : 여러 개의 모델이 투표 혹은 평균을 통해 최종 예측 결과를 선정
  • 보팅과 베깅의 차이점
    ① Voting : 서로 다른 모델을 결합
    ② Begging : 같은 종류의 모델을 결합 (데이터 샘플링을 다르게 하거나, 중첩을 허용)
  • 베깅의 대표적 모델 : 랜덤 포레스트(트리모델 기반)

 

랜덤 포레스트 (Random Forest)

  • 결정 트리 모델 이용
    (직관적이어서 결과를 쉽게 이해하지만, max_depth가 커질수록 과대적합이 되기 쉬움)
  • 다수의 의사결정트리의 의견이 통합 불가 → 다수결 원칙 적용 → 앙상블
  • 장점
    결정 트리 모델처럼 쉽고 직관적
    실제 값에 대한 추정값 오차 평균화, 분산 감소, 과대적합 감소
    부스팅 방식에 비해 빠른 수행 속도
  • 단점
    모델 튜닝을 위한 시간이 많이 필요 (하이퍼 파라미터의 종류가 많음)
    큰 데이터 세트에도 잘 동작하지만 트리 개수가 많아질수록 시간이 오래 걸림

 

랜덤 포레스트 주요 매개변수(Hyperparameter)

  • RandomForestClassifier(n_estimatiors, max_features, random_state)
    n_estimatiors : 트리의 개수
    max_features : 최대 선택할 특성 수 
    random_state : 랜덤 시드

※ max_features 값의 변화

int : 특성 수

float : 전체 특성의 백분율

①  max_features 값을 크게 하기

tree들은 같은 특성을 고려하므로 tree들이 매우 비슷해지고 가장 두드러진 특성을 이용해 데이터에 잘 맞음

② max_features를 낮추기

tree들은 많이 달라지고 각 tree는 데이터에 맞추기 위해 tree의 깊이가 깊어짐

 


 

3. 부스팅(Boosting)

  • 여러 개의 모델이 순차적으로 학습-예측하며 잘못 예측한 데이터에 가중치를 부여해 오류를 개선해 나가면서 학습
    순차적으로 진행되기 때문에 속도가 떨어지나, 오차가 점점 수정되어 정확도를 올리기 좋음
  • 결정 트리 모형을 베이스로 사용

 

※ 베깅과 부스팅

 

구분 베깅(Baggin) 부스팅(Boosting)
특징 같은 종류의 모델이 투표를 통해
최종 예측 결과 도출
(데이터 샘플을 다르게 가져감)
순차 학습 + 예측
(이전 모델의 오류를 고려)
목적 일반적으로 좋은 모델을 목표
과대적합 방지 (편향 학습 방지)
맞추기 어려운 문제를 해결
과소적합 방지 (학습 부족 방지)
적합 상황 데이터 값들의 편차가 클 경우 학습 정확도가 낮거나 오차가 클 경우
대표 모델 Random Forest Ada Boosting, Gradient Boosting, XG boosting, Light GBM
데이터 선택 무작위 선택 무작위 선택
(오류 데이터 가중치 적용)

 

 

에이다 부스팅 (Ada Boosting; Adaptive Boosting)

  • 랜덤 포레스트처럼 의사결정 트리 기반 모델 → 각각의 트리들이 독립적으로 존재하지 않음
  • 학습과 예측을 진행할수록 데이터들의 가중치가 달라짐
    잘못 분류된 데이터에 가중치를 높이고, 잘 분류된 데이터는 가중치를 낮춤
  • 각 트리(stump)들의 가중치를 다르게 설정
    예측률이 높은 트리는 가중치를 높이고, 낮은 트리는 가중치를 낮춤

 

 

  • 에이다 부스팅 동작 순서

①첫 번째 의사 결정 트리를 생성

위쪽 빨간원이 3개 있는 곳을 대충 분류 → 2개의 빨간 원과 1개의 녹색 세모가 잘못 구분

② 잘못된 2개의 빨간 원과 1개의 녹색 세모에 높은 가중치를 부여하고, 맞은 빨간원 3개와 녹색 세모 4개는 낮은 가중치를 부여 

③ 가중치를 부여한 상태에서 다시 분류

잘못된 3개의 빨간원에 높은 가중치를 부여하고, 맞은 5개의 녹색 세모는 낮은 가중치를 부여

④ 가중치를 부여한 상태에서 다시 재분류

⑤ 진행한 분류들을 결합

 

 

그래디언트 부스팅 (Gradient Boosting Machine)

  • AdaBoost와 기본 개념은 동일
  • 가중치를 계산하는 방식에서 경사하강법을 사용해 최적의 가중치(파라미터)를 찾아냄
  • 학습 속도가 느림 (부스팅의 일반적 단점)
  • 데이터 특성의 스케일 조정 불필요 (트리 기반 모델의 특성)

 

  • 주요 매개변수(Hyperparameter)
    GradientBoostingClassifier(n_estimators, learning_rate, max_depth, random_state)
    n_estimators : 트리의 개수
    learning_rate : 학습률 (높을수록 오차를 많이 보정)
    max_depth : 트리의 깊이
    random_state : 선택 데이터 시드

 

XG 부스팅 (eXtreme Gradient Boosting)

  • GBM 단점인 느리고, 과대적합 문제 → Early Stopping 제공, 과대적합 방지를 위한 규제를 포함
    (Early Stopping : 일정 횟수를 시행하여도 정확도가 올라가지 않으면, 멈추어서 과대적합 방지)
  • 병렬로 빠른 학습 가능
  • 주요 매개변수(Hyperparameter)
    XGBClassifier(n_estimators, learning_rate, max_depth, random_state)
    n_estimators : 트리의 개수
    learning_rate : 학습률 (높을수록 오차를 많이 보정)
    max_depth : 트리의 깊이
    random_state : 선택 데이터 시드

 

Light GBM

  • XG Boosting에 비해 가벼워 속도가 빠른 모델 (Low memory)
  • Leaf-wise(수직방향, 비대칭, 한쪽 방향을 먼저 끝까지 탐색)로 트리를 성장 → 속도 상승
    Level-wise(수평방향, 대칭)보다 오류가 더 적음 → 정확도 상승
  • 대량(1만개 이상)의 데이터를 병렬로 빠르게 학습 가능 (Low Memory, GPU 활용 가능)
    XG Boosting 대비 2~10배의 속도 (동일 파라미터 설정 시)
    소량 데이터에서는 제대로 동작하지 않음 (과대적합 위험, 1만개 이상 데이터 필요)
  • 예측 속도(Leaf-wise 트리 장점)가 빠르지만, XG Boosting(Level-wise)에 비해 과적합에 민감

 


 

4. Grid Search

  • 하이퍼파라미터를 설정하는 것은 모델링에서 매우 중요한 일
  • 관계있는 하이퍼파라미터들을 대상으로 가능한 모든 조합을 시도
  • 주요 매개변수(scikit-learn)
    GridSearchCV(모델, 모델 파라미터 목록, cv)

댓글