소개
경사 부스팅은 여러 개의 약한 학습기 (회귀 트리) 를 반복적으로 결합하여 강력한 단일 모델을 만드는 앙상블 기법입니다. 경사 부스팅의 조기 종료 지원을 통해 미지의 데이터에 잘 일반화되는 모델을 구축하는 데 필요한 최소 반복 횟수를 찾을 수 있습니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
필요한 라이브러리 및 데이터 로드
먼저, 필요한 라이브러리와 데이터를 로드해야 합니다. 경사 부스팅 구현에는 scikit-learn 라이브러리를 사용할 것입니다.
import time
import numpy as np
import matplotlib.pyplot as plt
from sklearn import ensemble
from sklearn import datasets
from sklearn.model_selection import train_test_split
data_list = [
datasets.load_iris(return_X_y=True),
datasets.make_classification(n_samples=800, random_state=0),
datasets.make_hastie_10_2(n_samples=2000, random_state=0),
]
names = ["Iris Data", "Classification Data", "Hastie Data"]
n_estimators = 200
데이터 준비
다음으로, 데이터를 학습용 및 테스트용 집합으로 분할하여 데이터를 준비합니다.
for X, y in data_list:
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=0
)
조기 종료 없이 모델 구축 및 학습
이제 조기 종료 없이 경사 부스팅 모델을 구축하고 학습합니다.
gb = ensemble.GradientBoostingClassifier(n_estimators=n_estimators, random_state=0)
start = time.time()
gb.fit(X_train, y_train)
time_gb.append(time.time() - start)
조기 종료를 사용한 모델 구축 및 학습
이제 조기 종료를 사용하여 경사 부스팅 모델을 구축하고 학습합니다. 유효성 검사* 비율을 지정하여 모델의 유효성 검사 손실을 평가하기 위해 학습에서 제외될 전체 데이터 세트의 비율을 나타냅니다. 경사 부스팅 모델은 학습 집합을 사용하여 학습되고 유효성 검사 집합을 사용하여 평가됩니다. 회귀 트리의 각 추가 단계가 추가될 때마다 유효성 검사 집합을 사용하여 모델을 평가합니다. 이는 마지막 n_iter_no_change 단계의 모델 점수가 적어도 tol 만큼 개선되지 않을 때까지 계속됩니다. 그 후, 모델이 수렴한 것으로 간주되고 추가 단계의 추가는 "조기에 중단"됩니다. 최종 모델의 단계 수는 속성 n_estimators*에서 확인할 수 있습니다.
gbes = ensemble.GradientBoostingClassifier(
n_estimators=n_estimators,
validation_fraction=0.2,
n_iter_no_change=5,
tol=0.01,
random_state=0,
)
start = time.time()
gbes.fit(X_train, y_train)
time_gbes.append(time.time() - start)
조기 종료 사용 여부에 따른 점수 비교
이제 두 모델의 점수를 비교합니다.
score_gb.append(gb.score(X_test, y_test))
score_gbes.append(gbes.score(X_test, y_test))
조기 종료 사용 여부에 따른 학습 시간 비교
이제 두 모델의 학습 시간을 비교합니다.
plt.figure(figsize=(9, 5))
bar1 = plt.bar(
index, time_gb, bar_width, label="조기 종료 없음", color="crimson"
)
bar2 = plt.bar(
index + bar_width, time_gbes, bar_width, label="조기 종료 사용", color="coral"
)
max_y = np.amax(np.maximum(time_gb, time_gbes))
plt.xticks(index + bar_width, names)
plt.yticks(np.linspace(0, 1.3 * max_y, 13))
autolabel(bar1, n_gb)
autolabel(bar2, n_gbes)
plt.ylim([0, 1.3 * max_y])
plt.legend(loc="best")
plt.grid(True)
plt.xlabel("데이터셋")
plt.ylabel("학습 시간")
plt.show()
조기 종료 사용 여부에 따른 점수 비교
이제 두 모델의 점수를 비교합니다.
plt.figure(figsize=(9, 5))
bar1 = plt.bar(
index, score_gb, bar_width, label="조기 종료 없음", color="crimson"
)
bar2 = plt.bar(
index + bar_width, score_gbes, bar_width, label="조기 종료 사용", color="coral"
)
plt.xticks(index + bar_width, names)
plt.yticks(np.arange(0, 1.3, 0.1))
autolabel(bar1, n_gb)
autolabel(bar2, n_gbes)
plt.ylim([0, 1.3])
plt.legend(loc="best")
plt.grid(True)
plt.xlabel("데이터셋")
plt.ylabel("테스트 점수")
plt.show()
요약
이 실험에서 우리는 기울기 부스팅에서 조기 종료에 대해 배웠습니다. 조기 종료는 미지의 데이터에 잘 일반화되는 모델을 구축하는 데 충분한 최소 반복 횟수를 찾을 수 있도록 합니다. 조기 종료를 사용한 기울기 부스팅 모델과 사용하지 않은 모델의 성능을 비교했으며, 조기 종료가 학습 시간, 메모리 사용량 및 예측 지연 시간을 상당히 줄일 수 있음을 관찰했습니다.