DecisionTree실습

김명준·2023년 12월 6일

MachineLearing

목록 보기
4/8
post-thumbnail
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split # 훈련과 테스트용 세트 분리
from sklearn.metrics import accuracy_score # 평가를 진행할 때 정확도 측정
from sklearn.tree import DecisionTreeClassifier #결정트리모델 가져오기

KNN과 동일하나, 인코딩이 들어간다.
1. 레이블 인코딩
하려고 하는 컬럼을 .unique()로 접근한다.
그 이후에 데이터를 연결할 딕셔너리를 생성한다.
ex) a_dic = { 'a' : 0, 'b' :1 ....}
이렇게하면 문자형이 숫자로 바뀐다. 바로 대입이 안되기 때문에 재대입을 통해서 적용시켜준다.

하지만 이렇게 하면 숫자로 바뀌기 때문에 다 같은 문자형인데 크기가 부여되어버리는 한계점이 있다.

그래서 원핫인코딩을 사용한다.
단어를 표현하는 가장 기본적인 표현방법이다.
원핫인코딩은 get_dummies() 메소드를 활용한다.
ex) X_one_hot = pd.get_dummies(X)

DecisionTree 모델링
dt= DecisionTreeClassifier(max_depth = 3)
나머지는 학습, 예측, 확인은 knn과 동일하다.

시각화 하기(graphviz)

설치
!pip install graphviz

# graphviz 경로 잡기
import os
os.environ["PATH"]+=os.pathsep+'C:/Program Files/Graphviz/bin/'

# 원핫인코딩 변수명 : X_one_hot
# DT 변수명 : dt
from sklearn.tree import export_graphviz
export_graphviz(dt, out_file='tree.dot',
               class_names=['p','e'],
               feature_names=X_one_hot.columns,
               impurity=False,
               filled=True)
               
               import graphviz

with open('tree.dot', encoding='UTF8') as f:
    dot_graph = f.read()

display(graphviz.Source(dot_graph))

from subprocess import check_call
check_call(['dot','-Tpng','tree.dot','-o','tree.png'])

이렇게하면 시각화 된 자료가 나오게되고, tree라는 이름으로 저장되게 된다.
이 순서는 위에부터 중요도 순서인데, 전체의 합이 1이며 1에 가까울수록 중요하다.

특성선택

fi : dt1.feature_importances_

df = pd.DataFrame(fi, index = X_one_hot.columns)
# by = 정렬 기준(컬럼이름을 지정안하면 0부터 붙음) 
df.sort_values(by = 0, ascending=False)

이렇게하면 컬럼값과 특성이 합쳐진 데이터프레임이 나온다.

교차검증

from sklearn.model_selection import cross_val_score
# 사용할 모델, 문제데이터, 정답데이터, cv = 데이터 분할 수 (주로 5 사용, train:test = 4:1)
score = cross_val_score(dt, X_train,y_train, cv = 5)

dt.score(X_train,y_train)
dt.score(X_test,y_test)

score <- train과 test를 바꿔가며 5번 학습한 결과

이 결과가 1에 가깝다고 좋은것은 아님. -> 과대적합일 수 있기 때문에!! 0.95정도가 이상적이라고 볼 수 있음.

profile
스인개 본점 빅데이터 과정

0개의 댓글