Table of Contents

ML

Random Forest에서의 Out-of-Bag (OOB)

꼬꼬마코더 2024. 5. 29. 13:49
728x90

랜덤 포레스트(Random Forest)에서 "Out-of-Bag (OOB)" 샘플은 모델의 성능을 평가하는 중요한 개념 중 하나입니다. OOB 샘플은 부트스트랩 샘플링 과정에서 선택되지 않은 데이터 포인트들을 의미합니다. 랜덤 포레스트는 이 OOB 샘플을 사용하여 추가적인 검증 데이터 없이도 모델의 성능을 평가할 수 있습니다.

Out-of-Bag (OOB) 샘플의 정의와 역할

  1. 부트스트랩 샘플링:

    • 랜덤 포레스트는 배깅(Bagging) 방법을 사용하여 여러 결정 트리를 학습합니다. 각 트리는 원본 데이터셋에서 부트스트랩 샘플링(복원 추출)을 통해 생성된 샘플을 사용하여 학습됩니다.
    • 복원 추출이기 때문에 원본 데이터셋에서 일부 데이터 포인트는 여러 번 선택될 수 있으며, 일부 데이터 포인트는 선택되지 않을 수 있습니다.
  2. OOB 샘플:

    • 각 결정 트리에서 부트스트랩 샘플링 과정에서 선택되지 않은 데이터 포인트를 OOB 샘플이라고 합니다.
    • 일반적으로 원본 데이터셋의 약 1/3 정도가 각 트리의 OOB 샘플로 남게 됩니다.
  3. OOB 에러:

    • 랜덤 포레스트는 OOB 샘플을 사용하여 각 트리의 성능을 평가할 수 있습니다. 즉, 각 트리는 자신이 학습에 사용되지 않은 OOB 샘플에 대해 예측을 수행합니다.
    • 모든 트리의 OOB 예측을 종합하여 전체 랜덤 포레스트 모델의 성능을 평가할 수 있습니다.
    • OOB 에러는 OOB 샘플에 대한 예측과 실제 값을 비교하여 계산됩니다. 이는 모델의 일반화 성능을 평가하는 좋은 방법입니다.

OOB 샘플을 사용한 평가의 장점

  1. 추가 검증 데이터 불필요:

    • OOB 샘플을 사용하면 별도의 검증 데이터셋이 필요 없습니다. 학습 데이터 내에서 자체적으로 검증을 수행할 수 있습니다.
    • 이는 데이터가 부족한 상황에서 매우 유용합니다.
  2. 효율적인 성능 평가:

    • 각 트리는 자신에게 할당되지 않은 OOB 샘플에 대해 예측을 수행하므로, 모델의 성능을 더 효율적으로 평가할 수 있습니다.
    • 이는 교차 검증과 유사한 역할을 하지만, 더 간편하게 수행됩니다.

OOB 에러 계산 방법

OOB 에러를 계산하는 과정은 다음과 같습니다:

  1. 각 결정 트리는 자신이 학습하지 않은 OOB 샘플에 대해 예측을 수행합니다.
  2. 모든 트리의 OOB 예측을 종합하여 최종 예측을 만듭니다.
  3. 최종 예측과 실제 값을 비교하여 OOB 에러를 계산합니다.

코드 예시

다음은 사이킷런(Scikit-learn)을 사용하여 랜덤 포레스트 모델을 학습하고, OOB 샘플을 사용하여 성능을 평가하는 예시입니다:

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)

# 랜덤 포레스트 모델 생성 (OOB 평가 활성화)
clf = RandomForestClassifier(n_estimators=100, oob_score=True, random_state=42)
clf.fit(X_train, y_train)

# OOB 점수 확인
oob_score = clf.oob_score_
print("OOB Score:", oob_score)

# 테스트 데이터에 대한 예측 및 정확도 평가
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Test Accuracy:", accuracy)

이 코드는 랜덤 포레스트 모델을 학습시키고, OOB 점수와 테스트 데이터에 대한 정확도를 출력합니다. OOB 점수는 모델이 학습 중에 자체적으로 평가한 성능을 나타내며, 테스트 데이터에 대한 정확도는 모델의 일반화 성능을 평가합니다.

요약

  • Out-of-Bag (OOB) 샘플: 부트스트랩 샘플링 과정에서 선택되지 않은 데이터 포인트입니다.
  • OOB 에러: OOB 샘플을 사용하여 모델의 성능을 평가하는 방법입니다.
  • 장점: 추가적인 검증 데이터셋이 필요 없으며, 효율적으로 모델의 성능을 평가할 수 있습니다.
  • 코드 구현: 사이킷런의 RandomForestClassifier를 사용하여 OOB 평가를 활성화하고 모델 성능을 확인할 수 있습니다.

OOB 평가 방법은 랜덤 포레스트의 중요한 특징 중 하나로, 모델의 성능을 효과적으로 평가하는 데 도움이 됩니다.

'ML' 카테고리의 다른 글

Classification Model 평가 및 지표 해석  (0) 2024.05.29
Validation set  (0) 2024.05.29
Ensemble > Bagging(Bootstrap Aggregating), Random Forest  (0) 2024.05.29
Ensemble 앙상블  (0) 2024.05.29
Decision tree -> pre-pruning, post-pruning  (0) 2024.05.29