✔ Python/1. Data Science

[머신러닝] 결정트리 실습 - Pima Indians Diabetes Database

  • -
주제: 결정트리 실습
작성: 2023-03-03
데이터: Pima Indians Diabetes Database
버젼
: ① python : 3. 9.13   ② pandas : 1. 4. 4   ③ sklearn : 1. 1. 1

안녕하세요, wscode 루카스입니다.

본 포스팅은 「파이썬 머신러닝 완벽가이드」 의 독학한 내용을 기반으로 하고 있습니다. 사용하게 될 Pima Indians Diabetes Database 데이터는 로지스틱 회귀알고리즘을 적용 시, 더 높은 정확도가 나오나, 결정트리의 사용법을 익히기 위해 해당 알고리즘을 사용함을 사전에 알려드립니다.


1. 데이터 준비

Pima Indians Diabetes Database 데이터는 측정을 기반으로 환자의 당뇨병 여부를 진단하기위한 데이터입니다. 변수는 아래와 같으며, 데이터는 하단의 링크를 통해서 다운로드 가능합니다.

  • 변수 : 임신횟수, BMI, 인슐린 수치, 연령등이 포함
  • 결과값 : outcome
Pima Indians Diabetes Database
https://www.kaggle.com/datasets/uciml/pima-indians-diabetes-database?resource=download
Human Activity Recognition Using Smartphones Data Set
https://archive.ics.uci.edu/ml/datasets/human+activity+recognition+using+smartphones

Pima Indians Diabetes Database 데이터 다운로드
각 데이터에 대한 개략적인 EDA

일반적으로 머신러닝 알고리즘을 적용하기 전에 데이터의 특성을 파악하는 작업인 EDA을 진행해여 적합한 알고리즘을 적용하는것이 본편적인 방식이나, 본 포스팅은 결정트리 알고리즘 사용법에 중점을 두기때문에 EDA는 생략하도록 하겠습니다.

2. 데이터 읽기

pandas의 .read_csv( ) 이용하여 다운받은 데이터를 읽습니다.

import pandas as pd
df= pd.read_csv('./diabetes.csv')
df.info()         #데이터의 일반적인 특성 파악                    
df.corr()         #데이터변수간의 상관관계 파악
더보기

.info() 결과값

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 768 entries, 0 to 767
Data columns (total 9 columns):
 #   Column                    Non-Null Count  Dtype  
---  ------                    --------------  -----  
 0   Pregnancies               768 non-null    int64  
 1   Glucose                   768 non-null    int64  
 2   BloodPressure             768 non-null    int64  
 3   SkinThickness             768 non-null    int64  
 4   Insulin                   768 non-null    int64  
 5   BMI                       768 non-null    float64
 6   DiabetesPedigreeFunction  768 non-null    float64
 7   Age                       768 non-null    int64  
 8   Outcome                   768 non-null    int64  
dtypes: float64(2), int64(7)
memory usage: 54.1 KB

.corr() 결과값

 

3. 모델 적용 및 시각화

3.1. DecisionTree

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split


dt_clf = DecisionTreeClassifier(random_state = 55)
X_train,X_test, y_train, y_test = train_test_split(df.iloc[:,:-1], df.iloc[:,-1],
                                                   test_size =0.3, random_state =77)
dt_clf.fit(X_train, y_train)

 

3.2. 시각화

import graphviz
from sklearn.tree import export_graphviz

# export_graphviz()의 호출 결과로 out_file로 지정된 tree.dot 파일을 생성
export_graphviz(dt_clf, out_file="tree.dot",
                feature_names = df.columns[:-1].to_list(), impurity=True, filled=True)
                # %conda install graphviz

# 위에서 생성된 tree.dot 파일을 Graphviz 읽어서 Jupyter Notebook상에서 시각화 
with open("tree.dot") as f:
    dot_graph = f.read()
graphviz.Source(dot_graph)

만약, 해당 데이터를 png로 저장하고싶다면? 

## How to convert Decision Tree.dot as png file
dot = graphviz.Source(dot_graph)
dot.format='png'
dot.render(filename='tree3') #tree.png 저장

decision tree 결과값

3.3. 변수간의 영향력 판단하기

import seaborn as sns
import numpy as np
%matplotlib inline

print("Feature importance :\n{0}".format(np.round(dt_clf.feature_importances_, 3)))
for name, value in zip(df.iloc[:,:-1],dt_clf.feature_importances_):
    print('{0}: {1:.3f}'.format(name, value))

 

sns.barplot(x=dt_clf.feature_importances_, y= df.columns[:-1])

3.4. 예측하기

 

pred = dt_clf.predict(X_test)

import sklearn
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, pred)
print("결정트리의 예측정화도: {0:.4f}".format(accuracy))

3.5. Grid_cv 활용하여 정확도 높히기

parmas = {'max_depth' : [5,6,7,8,9,10]
         }
         
grid_cv= GridSearchCV(dt_clf, param_grid = parmas, scoring ='accuracy', cv=5, verbose =1
                    )
grid_cv.fit(X_train, y_train)
print("Gridsearchcv 최고 평균 정확도 수치 : {0:.4f}".format(grid_cv.best_score_))
print("Gridsearchcv 최적 하이퍼 파라미터:", grid_cv.best_params_)

4. 요약 - 결정트리의 장단점

장점

  • 쉽고 직관적임
  • 피처의 스케일링이나 정규화등의 사전 가공 영향도가 적은 편임

단점

  • 과적합 알고리즘으로 성능이 떨어지는 경향이 있어, 이를 위해 트리의 크기(max_depth) 등의 하이퍼파라미터의 튜닝 필요함

Reference

  1. [도서] 「파이썬 머신러닝 완벽가이드」 4장 분류
  2. graphviz 설치 오류: https://wscode.tistory.com/70
  3. 사잇킬런으로 시작하는 머신러닝: https://wscode.tistory.com/68

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.