728x90
반응형
SMALL
트리 가지치기 (Tree Pruning)
의사결정 트리의 마지막 노드의 개수를 지정하여 트리의 깊이를 조정하는 방법이다. 클래스의 마지막 노드인 잎 노드 (leaf node)의 개수를 개발자가 직접 결정한다. 1개로 이루어진 잎 노드가 많을 경우 과대적합되어 있는 상태에서 잎 노드의 개수와 관계 없이 해당 가지에 불확실성이 너무 높을 경우 의사결정 트리의 성능에 문제를 줄 수 있다.
사전 가지치기 (pre-pruning) | 처음 트리를 만들 때 트리의 깊이나 마지막 노드의 최소 개수 등을 사전에 결정하여 입력한다.
|
사후 가지치기 (post-pruning) | 트리를 먼저 생성한 후 실험적으로 하이퍼 파라미터를 조정한다.
|
연속형 데이터를 나누는 기준
|
회귀 트리 (Regression Tree)
Y 데이터의 값이 연속형일 때의 의사결정 트리 생성 방법이다.
• Y 값의 각 속성별 분산이 얼마나 작은지를 측정한다. • 최종 결과 노드에서는 결과 노드들의 Y 평균값으로 최종 예상치를 반환한다. |
속성별 분산 구하기 위해 각 클래스 값들의 분산을 구하고 해당 클래스가 가진 데이터 개수의 비율만큼 곱한다.
Graphviz
Graphviz는 DOT 언어 스크립트로 지정된 그래프 그리기를 위해 AT&T 랩스 리서치가 시작한 오픈 소스 도구 패키지이다. 응용 소프트웨어가 도구를 사용할 수 있도록 라이브러리 또한 제공한다. Graphviz는 이클립스 퍼블릭 라이선스에 의해 허가된 자유 소프트웨어이다. https://graphviz.org/download/에서 os에 맞게 다운로드하고 conda install을 진행한다.
conda install python-graphviz
example
120명 요로 감염 의심 환자의 진단 케이스
|
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
train = pd.read_csv('./UTI_train.csv')
train.head(5)
test = pd.read_csv('./UTI_test.csv')
test.head(5)
train.drop('id', axis = 1, inplace = True)
train.head(3)
test.drop('id', axis = 1, inplace = True)
test.head(3)
train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Temperature 100 non-null float64
1 nausea 100 non-null int64
2 Lumbar_pain 100 non-null int64
3 Urine_pushing 100 non-null int64
4 Micturition_pain 100 non-null int64
5 Burning_urethra 100 non-null int64
6 Class 100 non-null object
dtypes: float64(1), int64(5), object(1)
memory usage: 5.6+ KB
train.columns.values
array(['Temperature', 'nausea', 'Lumbar_pain', 'Urine_pushing',
'Micturition_pain', 'Burning_urethra', 'Class'], dtype=object)
features = ['Temperature', 'nausea', 'Lumbar_pain', 'Urine_pushing', 'Micturition_pain', 'Burning_urethra']
X_train = train[features]
y_train = train[["Class"]]
X_test = test[features]
y_test = test[["Class"]]
DT1 = DecisionTreeClassifier(random_state=42)
DT1.fit(X_train, y_train)
from sklearn.tree import export_graphviz
export_graphviz(DT1, out_file="tree.dot",
class_names="CLASS",\
feature_names = features, impurity=True, filled=True)
import graphviz
with open("C:\\Users\\admin\\jupyter\\tree.dot") as f:
dot_graph = f.read()
graphviz.Source(dot_graph)
DT2 = DecisionTreeClassifier(criterion="entropy",random_state=42)
DT2.fit(X_train, y_train)
with open("tree.dot") as f:
dot_graph = f.read()
graphviz.Source(dot_graph)
pred = DT1.predict(X_test)
accuracy = accuracy_score(y_test , pred)
print('DT1 예측 정확도: ', accuracy)
pred = DT2.predict(X_test)
accuracy = accuracy_score(y_test , pred)
print('DT2 예측 정확도: ', accuracy)
DT1 예측 정확도: 0.95
DT2 예측 정확도: 1.0
728x90
반응형
LIST
'Data-driven Methodology > DS (Data Science)' 카테고리의 다른 글
[Data Science] 회귀 모델 (0) | 2022.09.29 |
---|---|
[Data Science] 빅 데이터 (Big Data) (0) | 2022.09.28 |
[Data Science] 의사결정 트리 (Decision Tree) (2) (0) | 2022.09.27 |
[Data Science] 의사결정 트리 (Decision Tree) (1) (0) | 2022.09.27 |
[Data Science] 이상치 처리 (0) | 2022.09.26 |