• 4주차 과제 : decision tree

    image

    • 사용 언어 : python
    • 해결 날짜 : 2021-10-09

    • 트리 그림 :

      image

    • 어떤 클래스가 예측될까 ?

      • 첫 번째 데이터 샘플 : 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)