-
[인프런 - 파이썬 머신러닝 완벽 가이드] 분류(Classification) 결정트리 Decision TreeData Science 2020. 6. 10. 06:29반응형
결정트리 Decision Tree
결정트리 알고리즘은 데이터에 있는 규칙을 학습을 통해 자동으로 찾아내는
tree 기반의 분류 규칙을 만든다 ( If Else 기반 규칙 )
즉 어떠한 기준으로 규칙을 만들어야 가장 효율적인 분류가 될것인가가
결정트리의 성능을 크게 좌우한다.
정보이득 ( Information Gain)
정보이득은 엔트로피라는 개념을 기반으로 한다.
엔트로피는 주어진 데이터 집합의 혼잡도를 의미.
서로 다른 값이 섞여있으면 엔트로피가 높고
같은 값이 섞여있으면 엔트로피가 낮다.
정보 이즉 지수는 1에서 엔트로피 지수를 뺸 값이다.
정보 이득이 높은 속성을 기준으로 분할한다.
지니 계수
지니계수는 원래 경제학에서 불평등 지수를 나타낼때 사용하는 계수
0이 가장 평등 1로 갈수록 불평등
ML에선 데이터가 다양할수록 평등 -> 0
데이터가 균일할수록 불평들 ->1
다양성↓ 균일도↑ 지니계수↑
결정트리의 규칙노드 생성 프로세트
결정트리 장점
* 쉽다, 직관적이다.
*피처의 스케일링이나 정규화등 사전 가공 영향도가 적다.
결정트리 단점
* 과적합으로 알고리즘 성능이 떨어진다. 이를 극복하기 위해 트리의 크기를
사전에 제한하는 튜닝이 필요하다.
결정트리 모델의 시각화
from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import warnings warnings.filterwarnings('ignore') # DecisionTree Classifier 생성 dt_clf = DecisionTreeClassifier(random_state=156) # 붓꽃 데이터를 로딩하고, 학습과 테스트 데이터 셋으로 분리 iris_data = load_iris() X_train , X_test , y_train , y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state=11) # DecisionTreeClassifer 학습. dt_clf.fit(X_train , y_train) from sklearn.tree import export_graphviz # export_graphviz()의 호출 결과로 out_file로 지정된 tree.dot 파일을 생성함. export_graphviz(dt_clf, out_file="tree.dot", class_names=iris_data.target_names , \ feature_names = iris_data.feature_names, impurity=True, filled=True) import graphviz # 위에서 생성된 tree.dot 파일을 Graphviz 읽어서 Jupyter Notebook상에서 시각화 with open("tree.dot") as f: dot_graph = f.read() graphviz.Source(dot_graph)
결정 트리의 Feature 선택 중요도
사이킷런의 DecisionClassifier 객체는 feature_importances_를 통해 학습/예측을 위해 중요한 feature들을 선택할수있게
정보를 제공함.
import seaborn as sns import numpy as np %matplotlib inline # feature importance 추출 print("Feature importances:\n{0}".format(np.round(dt_clf.feature_importances_, 3))) # feature별 importance 매핑 for name, value in zip(iris_data.feature_names , dt_clf.feature_importances_): print('{0} : {1:.3f}'.format(name, value)) # feature importance를 column 별로 시각화 하기 sns.barplot(x=dt_clf.feature_importances_ , y=iris_data.feature_names)
반응형'Data Science' 카테고리의 다른 글