본문 바로가기
인공지능학/기계학습

[기계학습] 9. 앙상블 학습의 이해, 랜덤 포레스트 모델의 이해

by iwbap 2024. 8. 20.
728x90

1. 앙상블 학습의 이해

앙상블 학습은 여러 개의 학습 알고리즘을 결합하여 하나의 강력한 모델을 만드는 방법입니다. 이번 글에서는 앙상블 학습의 개념과 대표적인 기법인 부스팅과 스태킹에 대해 알아보겠습니다.

 

앙상블 학습의 개념

앙상블 학습(Ensemble Learning)은 여러 개의 모델(약한 학습기)을 결합하여 예측 성능을 향상시키는 기법입니다. 개별 모델이 가진 약점을 상호 보완하여 전체 모델의 성능을 높이는 것이 목표입니다. 앙상블 학습의 주요 장점은 모델의 안정성과 예측 성능을 향상시키는 것입니다.

 

주요 앙상블 기법

  1. 배깅(Bagging) : 여러 모델을 병렬로 학습하고, 이들의 예측을 평균 또는 투표 방식으로 결합합니다. 대표적인 예로 랜덤 포레스트가 있습니다.
  2. 부스팅(Boosting) : 여러 모델을 순차적으로 학습하고, 이전 모델의 오차를 보완하면서 점진적으로 성능을 향상시킵니다.
  3. 스태킹(Stacking) : 서로 다른 여러 모델의 예측 결과를 새로운 메타 모델에 입력으로 사용하여 최종 예측을 수행합니다.

 

부스팅의 이해

부스팅(Boosting)은 순차적으로 학습된 약한 학습기들을 결합하여 강력한 모델을 만드는 앙상블 기법입니다. 각 학습기는 이전 학습기의 오류를 보완하며 학습합니다. 부스팅의 목표는 모델의 편향을 줄이고, 성능을 향상시키는 것입니다.

 

작동 원리

  1. 초기화 : 첫 번째 모델을 학습시킵니다.
  2. 오류 보정 : 두 번째 모델부터는 이전 모델이 잘못 예측한 샘플에 더 큰 가중치를 부여하여 학습합니다.
  3. 모델 결합 : 모든 학습기가 예측한 값을 가중 평균하여 최종 예측을 만듭니다.

 

대표적인 부스팅 알고리즘

  • AdaBoost : 오차가 큰 데이터 포인트에 가중치를 부여하여 학습을 반복하는 방식입니다.
  • Gradient Boosting : 손실 함수를 최소화하는 방향으로 학습기를 순차적으로 추가합니다.
  • XGBoost : Gradient Boosting을 효율적으로 구현한 알고리즘으로, 성능과 속도가 뛰어납니다.

 

스태킹의 이해

스태킹(Stacking)은 서로 다른 여러 모델의 예측 결과를 결합하여 최종 예측을 수행하는 앙상블 기법입니다. 기본적으로 2단계로 이루어져 있습니다.

  1. 기본 모델 학습 : 다양한 모델(기본 학습기)이 학습되고, 이 모델들의 예측 결과가 메타 모델의 입력으로 사용됩니다.
  2. 메타 모델 학습 : 기본 모델들의 예측을 기반으로 최종 예측을 수행하는 메타 모델을 학습합니다.

장점

  • 서로 다른 특성을 가진 여러 모델의 장점을 결합하여 높은 예측 성능을 얻을 수 있습니다.

단점

  • 복잡성이 증가하고, 모델 해석이 어려워질 수 있습니다.

2. 랜덤 포레스트 모델의 이해

랜덤 포레스트(Random Forest)는 배깅을 기반으로 한 강력한 앙상블 학습 알고리즘입니다. 이번 글에서는 랜덤 포레스트의 핵심 개념인 OOB(Out-of-Bag), 랜덤 패치와 랜덤 서브스페이스, 그리고 랜덤 포레스트 자체에 대해 알아보겠습니다.

 

OOB 개요

OOB(Out-of-Bag)는 랜덤 포레스트에서 모델의 성능을 평가하는 방법입니다. 랜덤 포레스트는 각 결정 트리를 학습할 때 부트스트랩 샘플링(중복 허용 샘플링)을 사용합니다. 이 과정에서 샘플되지 않은 데이터(즉, Out-of-Bag 데이터)를 사용하여 각 트리의 성능을 평가합니다.

 

OOB 평가의 장점

  • 별도의 검증 데이터 세트를 사용하지 않고도 모델의 성능을 평가할 수 있습니다.
  • 랜덤 포레스트 모델의 편향-분산 트레이드오프를 적절히 조정할 수 있습니다.

작동 원리

  1. 부트스트랩 샘플링으로 데이터를 샘플링하여 여러 트리를 학습시킵니다.
  2. 각 트리의 OOB 데이터를 사용하여 예측을 수행합니다.
  3. 모든 트리의 OOB 예측을 평균하여 최종 예측을 만듭니다.

 

랜덤 패치와 랜덤 서브스페이스의 이해

랜덤 패치(Random Patches)와 랜덤 서브스페이스(Random Subspaces)는 랜덤 포레스트의 변형으로, 다양성을 높여 모델의 성능을 개선하는 방법입니다.

  • 랜덤 패치(Random Patches)
    • 특성과 샘플을 모두 무작위로 선택하여 트리를 학습합니다. 이 방법은 특성뿐만 아니라 데이터 포인트도 무작위로 선택하여 학습 데이터의 다양성을 극대화합니다.
  • 랜덤 서브스페이스(Random Subspaces)
    • 모든 샘플을 사용하지만, 무작위로 선택된 일부 특성만을 사용하여 트리를 학습합니다. 고차원 데이터에서 과적합을 방지하고, 일반화 성능을 향상시킬 수 있습니다.

장점

  • 데이터의 특성에 대한 편향을 줄이고, 다양한 모델을 생성하여 성능을 향상시킵니다.
  • 노이즈에 강하고, 과적합을 줄일 수 있습니다.

 

랜덤 포레스트의 이해

랜덤 포레스트(Random Forest)는 배깅과 랜덤 패치, 랜덤 서브스페이스 기법을 결합한 앙상블 학습 알고리즘입니다. 랜덤 포레스트는 여러 개의 결정 트리를 학습하고, 이들의 예측을 결합하여 최종 예측을 수행합니다. 랜덤 포레스트는 높은 성능과 안정성을 제공하며, 분류와 회귀 문제 모두에 효과적입니다.

 

작동 원리

  1. 부트스트랩 샘플링 : 데이터에서 중복 허용 샘플링을 통해 여러 샘플을 생성합니다.
  2. 트리 학습 : 각 샘플에 대해 무작위로 선택된 특성의 하위 집합을 사용하여 결정 트리를 학습합니다.
  3. 예측 결합 : 각 트리의 예측을 결합하여 최종 예측을 수행합니다. 분류 문제에서는 다수결 투표, 회귀 문제에서는 평균을 사용합니다.

장점

  • 높은 예측 성능 : 다수의 트리를 결합하여 예측 성능을 향상시킵니다.
  • 과적합 방지 : 여러 트리를 사용하여 모델이 과적합되지 않도록 합니다.
  • 유연성 : 분류와 회귀 문제 모두에 적용 가능합니다.

단점

  • 해석의 어려움 : 단일 결정 트리에 비해 해석이 어려울 수 있습니다.
  • 속도 : 많은 트리를 학습하고 예측하는 데 시간이 소요될 수 있습니다.

 

예제 코드

 

Python을 사용하여 랜덤 포레스트를 구현하는 예제 코드는 다음과 같습니다.

[python]
 
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, y = iris.data, iris.target

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 랜덤 포레스트 모델 생성
rf = RandomForestClassifier(n_estimators=100, random_state=42, oob_score=True)

# 모델 학습
rf.fit(X_train, y_train)

# 모델 평가
y_pred = rf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

# OOB 평가 점수
oob_score = rf.oob_score_

print(f'Accuracy: {accuracy * 100:.2f}%')
print(f'OOB Score: {oob_score * 100:.2f}%')
 

위 코드는 sklearn의 RandomForestClassifier를 사용하여 Iris 데이터셋을 분류하고, OOB 평가 점수를 출력하는 예제입니다.


이번 글에서는 앙상블 학습과 랜덤 포레스트의 주요 개념을 살펴보았습니다. 앙상블 학습은 여러 모델을 결합하여 성능을 향상시키는 강력한 기법이며, 랜덤 포레스트는 이러한 앙상블 학습의 대표적인 알고리즘입니다. 이를 통해 다양한 데이터 분석 및 예측 문제를 효과적으로 해결할 수 있습니다.

728x90