의사결정나무 - 모델 구조
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')
Author And Source
이 문제에 관하여(의사결정나무 - 모델 구조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@danceintherain/의사결정나무-모델-구조저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)