랜덤 포레스트 OOB 오류 추정

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 Python scikit-learn 라이브러리를 사용하여 랜덤 포레스트 모델의 Out-Of-Bag (OOB) 오류율을 측정하는 방법을 보여줍니다. OOB 오류율은 각 학습 관측치에 대해 해당 관측치가 포함되지 않은 부트스트랩 샘플의 트리 예측을 사용하여 계산된 평균 오류입니다. 이를 통해 랜덤 포레스트 모델을 학습하는 동안 학습 및 검증을 수행할 수 있습니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

필요한 라이브러리 가져오기

필요한 라이브러리, scikit-learn, NumPy, Matplotlib 등을 가져오는 것으로 시작합니다. 또한 재현성을 보장하기 위해 랜덤 상태 값을 설정합니다.

import matplotlib.pyplot as plt
from collections import OrderedDict
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier

RANDOM_STATE = 123

이진 분류 데이터셋 생성

다음으로, scikit-learn 에서 제공하는 make_classification 함수를 사용하여 이진 분류 데이터셋을 생성합니다. 이 함수를 통해 샘플 수, 특징 수, 클래스당 클러스터 수, 정보 특징 수를 지정할 수 있습니다. 재현성을 보장하기 위해 고정된 랜덤 상태 값을 사용합니다.

X, y = make_classification(
    n_samples=500,
    n_features=25,
    n_clusters_per_class=1,
    n_informative=15,
    random_state=RANDOM_STATE,
)

앙상블 분류기 정의

max_features 매개변수의 값이 다른 세 개의 랜덤 포레스트 분류기를 리스트로 정의합니다. 학습 중 OOB 오류율 추적을 위해 warm_start 생성 매개변수를 True로 설정합니다. 또한 OOB 오류율 계산을 위해 oob_score 매개변수를 True로 설정합니다.

ensemble_clfs = [
    (
        "RandomForestClassifier, max_features='sqrt'",
        RandomForestClassifier(
            warm_start=True,
            oob_score=True,
            max_features="sqrt",
            random_state=RANDOM_STATE,
        ),
    ),
    (
        "RandomForestClassifier, max_features='log2'",
        RandomForestClassifier(
            warm_start=True,
            max_features="log2",
            oob_score=True,
            random_state=RANDOM_STATE,
        ),
    ),
    (
        "RandomForestClassifier, max_features=None",
        RandomForestClassifier(
            warm_start=True,
            max_features=None,
            oob_score=True,
            random_state=RANDOM_STATE,
        ),
    ),
]

OOB 오류율 계산

각 분류기마다 n_estimators 값의 범위를 반복하며 분류기를 데이터셋에 맞춥니다. 각 n_estimators 값에 대한 OOB 오류율을 기록하고 OrderedDict 객체에 저장합니다.

error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)

min_estimators = 15
max_estimators = 150

for label, clf in ensemble_clfs:
    for i in range(min_estimators, max_estimators + 1, 5):
        clf.set_params(n_estimators=i)
        clf.fit(X, y)

        oob_error = 1 - clf.oob_score_
        error_rate[label].append((i, oob_error))

OOB 오류율 시각화

마지막으로, 각 분류기의 OOB 오류율을 추정자 수의 함수로 플롯하여 오류율이 안정되는 추정자 수를 확인합니다. Matplotlib 을 사용하여 플롯을 생성합니다.

for label, clf_err in error_rate.items():
    xs, ys = zip(*clf_err)
    plt.plot(xs, ys, label=label)

plt.xlim(min_estimators, max_estimators)
plt.xlabel("n_estimators")
plt.ylabel("OOB error rate")
plt.legend(loc="upper right")
plt.show()

요약

이 실습에서는 scikit-learn 을 사용하여 랜덤 포레스트 모델의 Out-Of-Bag (OOB) 오류율을 측정하는 방법을 보여주었습니다. 이진 분류 데이터셋을 생성하고, 앙상블 분류기 목록을 정의하고, 각 분류기의 OOB 오류율을 계산하고, 결과를 시각화했습니다. 이 기술은 별도의 검증 세트 없이 랜덤 포레스트 모델의 오류율을 추정할 수 있도록 합니다.