기울기 부스팅 단조 제약 조건

Beginner

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

소개

이 단계별 튜토리얼은 단조 제약 조건이 기울기 부스팅 추정자에 미치는 효과를 보여줍니다. 기울기 부스팅은 회귀 및 분류 작업에 사용되는 인기 있는 머신 러닝 기법입니다. 이 튜토리얼에서는 인공 데이터 세트를 구축하고 기울기 부스팅 추정자를 사용하여 모델 예측에 미치는 단조 제약 조건의 효과를 보여줍니다.

VM 팁

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

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

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

라이브러리 가져오기

이 튜토리얼에 필요한 라이브러리를 가져오는 것으로 시작합니다.

from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.inspection import PartialDependenceDisplay
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

데이터 생성

대상 값이 첫 번째 특징과 양의 상관관계를 가지고 두 번째 특징과 음의 상관관계를 갖는 인공 데이터 세트를 생성합니다. 또한 데이터를 더욱 현실적으로 만들기 위해 일부 랜덤 노이즈를 추가합니다.

rng = np.random.RandomState(0)

n_samples = 1000
f_0 = rng.rand(n_samples)
f_1 = rng.rand(n_samples)
X = np.c_[f_0, f_1]
noise = rng.normal(loc=0.0, scale=0.01, size=n_samples)

y = 5 * f_0 + np.sin(10 * np.pi * f_0) - 5 * f_1 - np.cos(10 * np.pi * f_1) + noise

제약 없이 모델 학습

생성된 데이터에 제약 없이 모델을 학습하여 제약 없이 모델이 어떻게 수행되는지 확인합니다.

gbdt_no_cst = HistGradientBoostingRegressor()
gbdt_no_cst.fit(X, y)

단조 제약 조건을 갖는 모델 학습

이제 동일한 데이터에 단조 제약 조건을 적용하여 다른 모델을 학습합니다. 첫 번째 특징에 단조 증가 제약 조건을, 두 번째 특징에 단조 감소 제약 조건을 적용합니다.

gbdt_with_monotonic_cst = HistGradientBoostingRegressor(monotonic_cst=[1, -1])
gbdt_with_monotonic_cst.fit(X, y)

부분 의존도 시각화

이제 두 모델 모두에 대해 두 특징에 대한 예측의 부분 의존도를 시각화합니다.

fig, ax = plt.subplots()
disp = PartialDependenceDisplay.from_estimator(
    gbdt_no_cst,
    X,
    features=[0, 1],
    feature_names=(
        "First feature",
        "Second feature",
    ),
    line_kw={"linewidth": 4, "label": "unconstrained", "color": "tab:blue"},
    ax=ax,
)
PartialDependenceDisplay.from_estimator(
    gbdt_with_monotonic_cst,
    X,
    features=[0, 1],
    line_kw={"linewidth": 4, "label": "constrained", "color": "tab:orange"},
    ax=disp.axes_,
)

for f_idx in (0, 1):
    disp.axes_[0, f_idx].plot(
        X[:, f_idx], y, "o", alpha=0.3, zorder=-1, color="tab:green"
    )
    disp.axes_[0, f_idx].set_ylim(-6, 6)

plt.legend()
fig.suptitle("단조 제약 조건이 부분 의존도에 미치는 영향")
plt.show()

특징 이름을 사용하여 단조 제약 조건 지정

훈련 데이터에 특징 이름이 있는 경우 사전을 전달하여 단조 제약 조건을 지정할 수 있습니다. 이제 동일한 데이터를 사용하여 특징 이름을 사용하여 제약 조건을 지정하는 방법을 보여줍니다.

X_df = pd.DataFrame(X, columns=["f_0", "f_1"])

gbdt_with_monotonic_cst_df = HistGradientBoostingRegressor(
    monotonic_cst={"f_0": 1, "f_1": -1}
).fit(X_df, y)

np.allclose(
    gbdt_with_monotonic_cst_df.predict(X_df), gbdt_with_monotonic_cst.predict(X)
)

요약

이 튜토리얼에서는 기울기 부스팅 추정기에 대한 단조 제약 조건의 효과를 보여주었습니다. 인공 데이터 세트를 생성하고, 제약 조건이 없는 하나의 모델과 단조 제약 조건이 있는 다른 하나의 모델을 맞추고, 두 특징에 대한 예측의 부분 의존도를 시각화했습니다. 또한 특징 이름을 사용하여 단조 제약 조건을 지정하는 방법을 보여주었습니다.