의사결정나무 - 모델 구조

·2021년 12월 8일
0

NIPA AI 교육

목록 보기
12/31

1. 의사결정나무Decision Tree

스무고개와 같이 특정 질문들을 통해 정답을 찾아가는 모델

최상단 뿌리마디Root Node 에서부터 마지막 끝마디Terminal Node까지 아래 방향으로 진행

예측할 수 있게 질문을 만들고 그 질문에 답함으로써 예측하는 것

질문 하나로 안될 경우 중간 마디Internal Node를 추가
즉, 중간에 질문을 추가해서 모든 데이터를 나눈다.

2개 이상의 feature 데이터의 경우
X1, X2 각각의 변수에 대한 마디(질문)들을 추가하여 차례로 답한다.

마디마다 분리 기준대로 분리하여 최종적으로 나뉘어지는 곳이 끝마디Terminal Node, 마지막으로 나뉘어진 분류들이 Class

2. 실습

간단한 의사결정나무 만들기
이번 실습에서는 이론 자료에서 나왔던 항공 지연 데이터를 기반으로 간단한 의사결정나무를 구현해 보겠습니다.

항공 지연 데이터는 아래와 같습니다.

풍속에 따른 지연 여부를 알아내기 위하여 의사결정나무인 binary_tree의 기준값(threshold)을 변경해가며 완벽하게 지연 여부를 분리할 수 있는 모델을 만들어봅시다.

지시사항
binary_tree 함수는 입력하는 threshold 풍속을 기준으로 지연 여부를 예측한 결과를 DataFrame 형태로 출력합니다. data의 지연 여부와 예상 지연 여부가 같은 값이 나오도록 의사결정나무의 결과물을 data_pred에 저장하세요.
threshold 에 값을 넣어서 결과를 확인합니다. (ex) 1, 2, 3.5, …)

import numpy as np
import pandas as pd

# 풍속을 threshold 값에 따라 분리하는 의사결정나무 모델 함수
def binary_tree(data, threshold):
    
    yes = []
    no = []
    
    # data로부터 풍속 값마다 비교를 하기 위한 반복문
    for wind in data['풍속']:
    
        # threshold 값과 비교하여 분리합니다.
        if wind > threshold:
            yes.append(wind)
        else:
            no.append(wind)
    
    # 예측한 결과를 DataFrame 형태로 저장합니다.
    data_yes = pd.DataFrame({'풍속': yes, '예상 지연 여부': ['Yes']*len(yes)})
    data_no = pd.DataFrame({'풍속': no, '예상 지연 여부': ['No']*len(no)})
    
    return data_no.append(data_yes,ignore_index=True)

# 풍속에 따른 항공 지연 여부 데이터
Wind = [1, 1.5, 2.5, 5, 5.5, 6.5]
Delay  = ['No', 'No', 'No', 'Yes', 'Yes', 'Yes']

# 위 데이터를 DataFrame 형태로 저장합니다.
data = pd.DataFrame({'풍속': Wind, '지연 여부': Delay})
print(data,'\n')

"""
1. binary_tree 모델을 사용하여 항공 지연 여부를 예측합니다.
"""
data_pred = binary_tree(data, threshold = 4)
print(data_pred,'\n')

profile
백엔드 개발자. 공동의 목표를 함께 이해한 상태에서 솔직하게 소통하며 일하는 게 가장 즐겁고 효율적이라고 믿는 사람.

0개의 댓글