-
4주차 과제 : decision tree
- 사용 언어 : python
-
해결 날짜 : 2021-10-09
-
트리 그림 :
-
어떤 클래스가 예측될까 ?
- 첫 번째 데이터 샘플 : feature4가 0.2로 0.8보다 작으므로 True, 따라서 좌측으로 내려가서 class 1로 예측된다.
- 두 번째 데이터 샘플 : feature4가 1.4로 0.8보다 크므로 False, 따라서 우측으로 내려간 다음 feature4가 1.4로 1.75보다 작으므로 True, 따라서 좌측으로 내려간 다음 feature3가 4.7로 4.95보다 작으므로 True, 따라서 좌측으로 내려가서 class 2로 예측된다.
- 세 번째 데이터 샘플 : feature4가 2.5로 0.8보다 크므로 False, 따라서 우측으로 내려간 다음 feature4가 2.5로 1.75보다 크므로 False, 따라서 우측으로 내려간 다음feature3가 6.1로 4.85보다 크므로 False, 따라서 우측으로 내려가서 class 3으로 예측된다.
-
코드 설명 :
- pandas의 read_csv 함수로 iris-3.csv 파일을 읽어오고, 0~3열들의 값들은 data로, 4열의 값들은 target으로 설정한다.
- 최대 깊이를 3으로 설정한 tree에 data와 target을 모델링하여 graphviz를 통해 시각화 하였다. 이 때, feature_names와 class_name을 달아주어 구분하기 편하게 하였다.
- 이후 iris+3.csv 파일을 읽어와 방금 전 모델링한 tree를 통해 예측한 결과를 프린트하였다.
-
코드
# In[16]: import pandas as pd import numpy as np from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.tree import export_graphviz import graphviz df = pd.read_csv('C:/Users/rjsdu/OneDrive/바탕 화면/3-2/기계학습(박정희 교수님)/과제/4주차/iris-3.csv') data = df.iloc[:, :-1] target = df.iloc[:, -1] feature_names = data.columns.tolist() feature_names = feature_names[0:4] target_name = np.array(['1', '2', '3']) tree = DecisionTreeClassifier(max_depth=3, random_state = 0) tree.fit(data, target) export_graphviz(tree, out_file="tree.dot", feature_names = feature_names, class_names = target_name) with open("tree.dot") as f: dot_graph = f.read() display(graphviz.Source(dot_graph)) # In[17]: csv2 = pd.read_csv('C:/Users/rjsdu/OneDrive/바탕 화면/3-2/기계학습(박정희 교수님)/과제/4주차/iris+3.csv') y_pred = tree.predict(csv2) print(y_pred)