다중 출력 의사 결정 트리 회귀

Beginner

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

소개

이 실습에서는 의사 결정 트리를 사용한 다중 출력 회귀의 예제를 안내합니다. 단일 기저 특징을 기반으로 원의 잡음이 있는 x 및 y 관측치를 동시에 예측하는 데 의사 결정 트리가 어떻게 사용되는지 확인할 수 있습니다. 결과적으로 원을 근사하는 지역 선형 회귀를 학습합니다.

VM 팁

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

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

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

라이브러리 가져오기

이 단계에서는 필요한 라이브러리인 numpy, matplotlib.pyplot 및 sklearn.tree 의 DecisionTreeRegressor 를 가져옵니다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor

랜덤 데이터셋 생성

이 단계에서는 랜덤 데이터셋을 생성합니다. numpy 라이브러리를 사용하여 0 에서 200 사이의 랜덤 값을 가진 100 개 요소의 정렬된 배열을 생성한 다음 각 요소에서 100 을 뺍니다. 그런 다음 numpy를 사용하여 각 요소의 사인과 코사인을 계산하고 이 배열들을 결합하여 모양이 (100, 2) 인 2 차원 배열을 생성하여 y 배열을 만듭니다. 또한 5 번째 요소마다 랜덤 노이즈를 추가합니다.

## 랜덤 데이터셋 생성
rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(100, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T
y[::5, :] += 0.5 - rng.rand(20, 2)

회귀 모델 학습

이 단계에서는 회귀 모델을 학습합니다. sklearn.treeDecisionTreeRegressor를 사용하여 서로 다른 최대 깊이를 가진 세 가지 다른 모델을 학습합니다.

## 회귀 모델 학습
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_3 = DecisionTreeRegressor(max_depth=8)
regr_1.fit(X, y)
regr_2.fit(X, y)
regr_3.fit(X, y)

예측

이 단계에서는 이전 단계에서 생성한 모델을 사용하여 예측을 수행합니다. np.arange를 사용하여 -100 부터 100 까지 0.01 간격의 새로운 값 배열을 생성한 다음, 모델의 predict 메서드를 사용하여 출력을 예측합니다.

## 예측
X_test = np.arange(-100.0, 100.0, 0.01)[:, np.newaxis]
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)
y_3 = regr_3.predict(X_test)

결과 플롯

이 단계에서는 결과를 플롯합니다. matplotlib.pyplot를 사용하여 원본 데이터의 산점도와 세 가지 모델 예측 각각을 그립니다. 또한 플롯에 레이블과 제목을 추가합니다.

## 결과 플롯
plt.figure()
s = 25
plt.scatter(y[:, 0], y[:, 1], c="navy", s=s, edgecolor="black", label="data")
plt.scatter(
    y_1[:, 0],
    y_1[:, 1],
    c="cornflowerblue",
    s=s,
    edgecolor="black",
    label="max_depth=2",
)
plt.scatter(y_2[:, 0], y_2[:, 1], c="red", s=s, edgecolor="black", label="max_depth=5")
plt.scatter(
    y_3[:, 0], y_3[:, 1], c="orange", s=s, edgecolor="black", label="max_depth=8"
)
plt.xlim([-6, 6])
plt.ylim([-6, 6])
plt.xlabel("target 1")
plt.ylabel("target 2")
plt.title("다중 출력 결정 트리 회귀")
plt.legend(loc="best")
plt.show()

요약

이 실험에서는 다중 출력 회귀를 위한 의사 결정 트리를 사용하는 방법을 배웠습니다. 랜덤 데이터를 생성하고, 회귀 모델을 학습시키고, 예측을 수행하며, 결과를 플롯했습니다. 의사 결정 트리는 원을 근사하는 지역 선형 회귀를 학습했습니다. 또한, 트리의 최대 깊이가 너무 높게 설정되면 의사 결정 트리가 학습 데이터의 세부 사항을 너무 과도하게 학습하고 노이즈에서 학습하여 과적합될 수 있음을 보았습니다.