본문 바로가기
AI & 머신러닝 coding skill

머신러닝 의사결정 나무(DecisionTree Regressor) - 회귀

by 호빵님 2022. 5. 24.
반응형

의사결정 나무(DecisionTree Regressor) - 회귀

회귀를 위한 의사결정 나무 모델을 사용해보고, 결과를 확인해보겠습니다.

특히 max_depth라고 하는, 나무의 최대 깊이를 다양하게 정의하여 모델의 학습 결과를 그래프를 통해 이해해보겠습니다.


회귀 의사결정 나무를 위한 사이킷런 함수/라이브러리

  • from sklearn.tree import DecisionTreeRegressor : 사이킷런에 구현되어 있는 회귀 의사결정 나무 모델을 불러옵니다.
  • DecisionTreeRegressor(max_depth)
    • max_depth : 트리의 최대 깊이
  • [Model].fit(X, y): (X, y) 데이터셋에 대해서 모델을 학습시킵니다.
  • [Model].predict(X): X 데이터를 바탕으로 예측되는 값을 출력합니다.

 

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

from elice_utils import EliceUtils
elice_utils = EliceUtils()

# 랜덤한 데이터 셋을 생성하여 반환하는 함수입니다.
def load_data():
    
    rng = np.random.RandomState(1)
    X = np.sort(5 * rng.rand(80, 1), axis=0)
    y = np.sin(X).ravel()
    y[::5] += 3 * (0.5 - rng.rand(16))
    
    return X, y
"""
1. 회귀 의사결정 나무 모델을 이용하여
   학습 및 예측을 수행한 결과를 반환하는 함수를 구현합니다.
   
   Step01. 회귀를 위한 
           의사결정 나무 모델을 정의합니다.
   
   Step02. 정의한 의사결정 나무 모델을 
           데이터에 맞추어 학습시킵니다.
           
   Step03. 학습된 모델을 이용하여 
           테스트 데이터에 대한 예측을 수행합니다.
"""
def DT_Reg(X, y, X_test, m_depth):
    
    reg = DecisionTreeRegressor(max_depth = m_depth)
    
    reg.fit(X, y)
    
    pred = reg.predict(X_test)
    
    return pred
    
# 회귀를 위한 의사결정 나무 결과를 그래프로 시각화합니다.
def Visualize(X, y, X_test, y_1, y_5, y_20):
    
    plt.figure()
    plt.scatter(X, y, s=20, edgecolor="black",
                c="darkorange", label="data")
    plt.plot(X_test, y_1, color="cornflowerblue",
             label="max_depth=1", linewidth=2)
    plt.plot(X_test, y_5, color="yellowgreen", label="max_depth=5", linewidth=2)
    plt.plot(X_test, y_20, color="red", label="max_depth=20", linewidth=2)
    plt.xlabel("data")
    plt.ylabel("target")
    plt.title("Decision Tree Regression")
    plt.legend()
    
    plt.savefig('decision_regressor.png')
    elice_utils.send_image('decision_regressor.png')
    
"""
2. 다양한 max_depth 인자를 설정한
   회귀 의사결정 나무 모델로 
   학습, 예측을 수행한 후 결과를 확인하는 함수를 구현합니다.
   
   Step01. 구현된 DT_Reg 함수를 이용하여 
           각각 max_depth가 1,5,20 인 의사결정 나무 모델로 
           테스트 데이터에 대한 예측을 하고, 그 값을 저장합니다.
"""
def main():
    
    X, y = load_data()
    
    X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
    
    # max_depth = 1
    y_1 = DT_Reg(X, y, X_test, 1)
    
    # max_depth = 5
    y_5 = DT_Reg(X, y, X_test, 5)
    
    # max_depth = 20
    y_20 = DT_Reg(X, y, X_test, 20)
    
    Visualize(X, y, X_test, y_1, y_5, y_20)
    
    return y_1, y_5, y_20
    
if __name__ == "__main__":
    main()

 

 

*본 포스팅은 DX기업교육 플랫폼인 Elice academy의 머신러닝 심화 과정에서 실습한 코드를 이용해서 작성되었습니다.

https://elice.io/

 
 
 

올인원 디지털 교육 플랫폼 - 엘리스

우리 모두를 위한 교실, 엘리스와 함께 더 나은 기회를 만들어보세요

elice.io

 

 

반응형