[48일차]Decision Tree - 회귀

김준석·2024년 1월 31일

Decision Tree - 회귀

MSE 최소화 방식

Decision Tree에서 회귀 문제를 푸는 주요한 방식 중 하나

위와 같은 데이터가 있다고 할 때

각 데이터들이 모여있는 부분에 직선을 그려주는 형식.

  • 각 노드에서 실제 정답과 예측 값 사이의 평균 제곱 오차(MSE)의 평균을 계산하고
  • 이 값을 최소화하는 노드를 찾아가는 방식으로 Tree가 만들어짐

위에서 나눈 형태에서 한번 더 나누게 되면 아래와 같은 형태가 됨

이를 계속해서 진행하다 보면 MSE가 최소로 되는 계단 형태의 그래프가 그려진다.

각 직선 부분을 기준으로 나눠짐.

Decision Tree in 회귀 문제 실습

아래와 같은 데이터가 있다.

  1. MSE 최소화 과정을 활용한 Decision Tree 모델 생성
X = X.reshape(-1, 1) # 학습을 위한 차원 변환 진행

# MSE 최소화 결정 트리 생성
dt_mse_reg = DecisionTreeRegressor(max_depth=3)
dt_mse_reg.fit(X, y)

max_depth=3 : 3층의 트리를 만들 것이다.

이를 시각화 하게 되면 아래와 같이 된다.

이를 실제 데이터 포인트에 그려보면

# 결과 예측 진행
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_pred = dt_mse_reg.predict(X_test)

# 시각화
plt.figure(figsize=(10, 6))
plt.scatter(X, y,
            s=20, edgecolor="black",
            c="darkorange", label="data")
plt.plot(X_test, y_pred,
         color="cornflowerblue", label="prediction", linewidth=2)

plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

이런식으로 직선으로 나뉘는 회귀선을 볼 수 있다.

3~4사이에 아래로 내려간 형태가 있다.
이는 데이터 포인트 를 맞추려고 하다보니 그렇게 된건데, 이는 오버피팅되었다고 볼 수 있다고 한다.

그렇기 때문에 max_depth를 적당히 줘야 된다.

Tree 사용 과정에서의 주의사항

  • 트리 구조는 상당히 많은 장점을 갖고 있음
    • 해석 용이성 & 사용 편리함
    • 적당히 괜찮은 성능
    • 스케일링에 둔감함 등

  • 단점! 하지만 트리 기반 모델은

    • 축에 수직인 방향으로 데이터가 분할됨
      • 따라서 축에 수직한 데이터는 쉽게 해결하지만
        경계면이 회전이 되어있다면 구불구불한 경계면이 생성됨
      • 일반화에 어려움이 있을 수 있음
      • 필요시 주성분 분석을 통한 데이터 회전이 필요할 수 있음
    • 데이터 노이즈에 굉장히 민감하며
      • 특정 데이터의 추가가 전체 모델 결과에 큰 변화를 줄 수 있음
    • Depth가 깊다면 강한 Overfit의 위험이 큼
      보통은 2~3을 줌.

0개의 댓글