본문 바로가기

코딩/Python

[코딩] 결정트리(f.혼자 공부하는 머신러닝 딥러닝)

반응형

ㅇ불순도(gini impurity)

  - 지니불순도 = 1-(음성클래스비율^2 + 양성클래스비율^2)

  -  어떤 노드의 두 클래스 비율이 1/2씩 차이가 나면 지니 불순도는 최악

  -  반면, 노드에 하나의 클래스만 있다면 지니 불순도는 0이 됨. 즉, 순수노드

ㅇ 결정트리 모델은 부모 노드와 자식노드의 불순도 차이가 가능한 크도록 트리를 성장시킴

ㅇ 정보이득 :  부모와 자식  노드 사이의 불순도

 

DecisionTreeClassifier에서 criterion = 'entropy' 를 지정하여 엔트로피 불순도를 사용할 수 있음.

엔트로피 불순도 : -음성클래스비율 x log2(음성클래스비율) - 양성 클래스 비율 x log2(양성클래스비율)

 

 

데이터 및 train-test 나누기
#데이터
import pandas as pd
import matplotlib.pyplot as plt
wine = pd.read_csv('https://bit.ly/wine_csv_data')

data = wine[['alcohol', 'sugar', 'pH']].to_numpy()
target = wine['class'].to_numpy()

#train,test 데이터 나누기
from sklearn.model_selection import train_test_split

train_input, test_input, train_target, test_target = train_test_split(data, target, test_size=0.2, random_state=42)

 

결정트리
#결정트리
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(max_depth = 3, random_state = 42)
dt.fit(train_input, train_target)
print(dt.score(train_input, train_target))
print(dt.score(test_input, test_target))

plt.figure(figsize = (10,8))

from sklearn.tree import plot_tree
plot_tree(dt, filled = True, feature_names = ['alcohol', 'sugar', 'PH'])  #filled = True는 클래스마다 색깔을 부여하고, 클래스의 비율이 높아지면 진한색으로 표시시
print(dt.feature_importances_)  #중요특성  확인
plt.show()
반응형