부분 의존성을 활용한 고급 플롯

Beginner

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

소개

이 튜토리얼에서는 여러 특징에 대한 부분 의존성 곡선을 플롯하는 과정을 안내합니다. 부분 의존성 곡선은 모든 다른 특징을 일정하게 유지하면서 특징이 머신 러닝 모델의 예측 결과에 미치는 영향을 분석하는 데 사용됩니다. 이 튜토리얼에서는 의사 결정 트리와 다층 퍼셉트론에 대해 당뇨병 데이터 세트에서 부분 의존성 곡선을 플롯하는 방법을 보여줍니다.

VM 팁

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

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

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

당뇨병 데이터셋으로 모델 학습

이 단계에서는 당뇨병 데이터셋으로 의사 결정 트리와 다층 퍼셉트론을 학습합니다.

diabetes = load_diabetes()
X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
y = diabetes.target

tree = DecisionTreeRegressor()
mlp = make_pipeline(
    StandardScaler(),
    MLPRegressor(hidden_layer_sizes=(100, 100), tol=1e-2, max_iter=500, random_state=0),
)
tree.fit(X, y)
mlp.fit(X, y)

두 특징에 대한 부분 의존성 플롯

이 단계에서는 의사 결정 트리에 대해 "나이"와 "BMI"(체질량 지수) 라는 두 특징에 대한 부분 의존성 곡선을 플롯합니다. 두 개의 특징을 사용하면 PartialDependenceDisplay.from_estimator는 두 개의 곡선을 플롯할 것으로 예상합니다. 여기서 플롯 함수는 ax에 의해 정의된 공간을 사용하여 두 개의 플롯 그리드를 배치합니다.

fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("의사 결정 트리")
tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age", "bmi"], ax=ax)

다층 퍼셉트론에 대해서도 부분 의존성 곡선을 플롯할 수 있습니다. 이 경우 line_kwPartialDependenceDisplay.from_estimator에 전달하여 곡선의 색상을 변경합니다.

fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("다층 퍼셉트론")
mlp_disp = PartialDependenceDisplay.from_estimator(
    mlp, X, ["age", "bmi"], ax=ax, line_kw={"color": "red"}
)

두 모델의 부분 의존성 곡선 함께 플롯하기

이 단계에서는 두 모델의 부분 의존성 곡선을 같은 플롯에 그립니다.

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))
tree_disp.plot(ax=ax1)
ax1.set_title("의사 결정 트리")
mlp_disp.plot(ax=ax2, line_kw={"color": "red"})
ax2.set_title("다층 퍼셉트론")

곡선을 서로 위에 그려 비교하는 또 다른 방법이 있습니다. 여기서 한 행과 두 열을 가진 그림을 만듭니다. 축은 PartialDependenceDisplay.plot 함수에 리스트로 전달되어 각 모델의 부분 의존성 곡선을 같은 축에 그립니다. 축 리스트의 길이는 그려지는 플롯의 개수와 같아야 합니다.

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 6))
tree_disp.plot(ax=[ax1, ax2], line_kw={"label": "의사 결정 트리"})
mlp_disp.plot(
    ax=[ax1, ax2], line_kw={"label": "다층 퍼셉트론", "color": "red"}
)
ax1.legend()
ax2.legend()

tree_disp.axes_는 부분 의존성 플롯을 그리기 위해 사용된 축을 저장하는 넘파이 배열 컨테이너입니다. 이를 mlp_disp에 전달하여 플롯을 서로 위에 그리는 것과 같은 효과를 얻을 수 있습니다. 또한 mlp_disp.figure_는 그림을 저장하여 plot 호출 후 그림 크기를 조정할 수 있습니다. 이 경우 tree_disp.axes_가 두 차원이므로 plot은 왼쪽 가장자리 플롯에만 y 레이블과 y 눈금을 표시합니다.

tree_disp.plot(line_kw={"label": "의사 결정 트리"})
mlp_disp.plot(
    line_kw={"label": "다층 퍼셉트론", "color": "red"}, ax=tree_disp.axes_
)
tree_disp.figure_.set_size_inches(10, 6)
tree_disp.axes_[0, 0].legend()
tree_disp.axes_[0, 1].legend()
plt.show()

하나의 특징에 대한 부분 의존성 플롯

이 단계에서는 하나의 특징인 "나이"에 대한 부분 의존성 곡선을 같은 축에 그립니다. 이 경우 tree_disp.axes_를 두 번째 플롯 함수에 전달합니다.

tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age"])
mlp_disp = PartialDependenceDisplay.from_estimator(
    mlp, X, ["age"], ax=tree_disp.axes_, line_kw={"color": "red"}
)

요약

이 튜토리얼에서는 PartialDependenceDisplay 객체를 사용하여 여러 특징에 대한 부분 의존성 곡선을 플롯하는 방법을 보여줍니다. 먼저, 의사 결정 트리와 다층 퍼셉트론을 당뇨병 데이터 세트에 대해 학습했습니다. 그런 다음 두 특징에 대해 의사 결정 트리와 다층 퍼셉트론의 부분 의존성 곡선을 플롯했습니다. 다음으로, 두 모델의 부분 의존성 곡선을 같은 플롯에 그렸습니다. 마지막으로, 같은 축에 하나의 특징에 대한 부분 의존성 곡선을 플롯했습니다.