소개
이 실습에서는 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 오류율을 계산하고, 결과를 시각화했습니다. 이 기술은 별도의 검증 세트 없이 랜덤 포레스트 모델의 오류율을 추정할 수 있도록 합니다.