728x90

환경 : Google Colab

언어 : Python3

사전 작업 :  첨부파일의 playtennis.scv를 다운 받은 뒤 구글 드라이브에 업로드 / 코랩에서 구글 드라이브 마운트

playtennis.csv
0.00MB

 


# 데이터를 불러오기 위한 pandas
import pandas as pd
# 데이터를 다루기 위한 numpy
import numpy as np

# 사이킷런(sklearn)의 함수들을 사용하여 모델 생성

# 기존 데이터를 훈련/테스트 데이터로 나누어주기 위한 train_test_split
from sklearn.model_selection import train_test_split
# DecisionTree를 생성, 훈련 시켜줄 DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier

# 훈련 결과를 알아보기 위한 accuracy_score
from sklearn.metrics import accuracy_score

# 훈련결과를 도식화할 때 사용하기 위한 tree, Image, pydotplus
from sklearn import tree
from IPython.display import Image
import pydotplus
# 파일 경로는 직접 저장한 경로로 설정해주어야한다.
tennis_data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/playtennis.csv')
tennis_data

 셀 실행 결과 tennis_data의 데이터를 확인할 수 있다.

tennis_data.Outlook = tennis_data.Outlook.replace('Sunny', 0)
tennis_data.Outlook = tennis_data.Outlook.replace('Overcast', 2)
tennis_data.Outlook = tennis_data.Outlook.replace('Rain', 1)

tennis_data.Temperature = tennis_data.Temperature.replace('Hot', 1)
tennis_data.Temperature = tennis_data.Temperature.replace('Mild', 2)
tennis_data.Temperature = tennis_data.Temperature.replace('Cool', 3)

tennis_data.Humidity = tennis_data.Humidity.replace('High', 1)
tennis_data.Humidity = tennis_data.Humidity.replace('Normal', 2)

tennis_data.Wind = tennis_data.Wind.replace('Weak', 1)
tennis_data.Wind = tennis_data.Wind.replace('Strong', 2)

tennis_data.PlayTennis = tennis_data.PlayTennis.replace('No', 1)
tennis_data.PlayTennis = tennis_data.PlayTennis.replace('Yes', 2)

tennis_data

 모델을 학습시킬 때는 모든 데이터를 숫자로 변환하여 학습 시켜야한다. 아래는 데이터를 모두 수치화 시킨 tennis_data이다.

X = np.array(pd.DataFrame(tennis_data, columns=['Outlook', 'Temperature', 'Humidity', 'Wind']))

Y = np.array(pd.DataFrame(tennis_data, columns=['PlayTennis']))

 tennis_data를 독립 변수(기준)과 종속 변수(결과)로 분리해준다.

x_train, x_test, y_train, y_test = train_test_split(X, Y)

 X, y를 훈련데이터와 테스트 데이터로 분리해준다.

dt_clf = DecisionTreeClassifier()
dt_clf = dt_clf.fit(x_train, y_train)

 지도학습 분류 알고리즘이라는 거창한 이름에 걸맞지 않긴 하지만 위의 두 줄로 학습은 완료된다.

 df_clf라는 변수에 Decision Tree를 생성 해준 뒤 fit함수를 이용하여 생성된 트리를 훈련데이터에 맞춰준다.

dt_prediction = dt_clf.predict(x_test)

 predict함수를 이용하여 테스트 데이터에 대한 결과를 계산해준다.

accuracy = accuracy_score(y_test, dt_prediction)
print(f'정확도:{accuracy}')

 이 때, 출력되는 정확도의 경우에는 tain_test_split 이하의 셀들을 반복할 때마다 바뀐다. 그렇기 때문에 정확도가 0 또는 0.25와 같이 매우 낮은값이 나와도 잘못한 것이 아니니 너무 신경쓰지는 말길 바란다.

feature_names = tennis_data.columns.tolist()
feature_names = feature_names[0:4]

target_name = np.array(['Play No', 'Play Yes'])

dt_dot_data = tree.export_graphviz(dt_clf, out_file=None,
                                   feature_names=feature_names,
                                   class_names=target_name,
                                   filled=True, rounded=True,
                                   special_characters=True)
                                   
dt_graph = pydotplus.graph_from_dot_data(dt_dot_data)
Image(dt_graph.create_png())

 학습된 Decision Tree를 도식화해서 출력해주는 코드이다. 이것 역시 재실행할 때 마다 바뀐다.

훈련 결과

+ Recent posts