의사결정 나무
의사결정나무 Decision Tree
- 한 번에 한 가지 변수에 대해 Yes/No로 분기
- 분기를 반복하여 최종 의사결정까지 과정에 도달
- 나무에서 각각의 마디(node)는 데이터의 부분 집합
- 용어:
- 뿌리(root): 의사결정나무의 출발점. 모든 사례를 포함.
- 자식(child): 하나의 마디에서 분기된 마디
- 끝(terminal)/ 잎사귀(leaf): 자식이 없는 마디
- 가지(branch): 뿌리에서 잎사귀 사이의 마디들
의사결정 나무의 장점
- 결과를 이해하기 쉽다
- 전처리가 단순
- 빠르다
- 다양한 종류의 변수를 다룰 수 있음
- 불필요한 변수에 영향을 적게 받음
- 시각화가 쉬움
- 통계적 가정이 적음
의사결정 나무의 단점
- 과대 적합(overfitting)되기 쉬움
- 결과의 불안정
- 최적화가 어려움
- 학습시키기 어려운 문제들이 있음(예: XOR)
- 변수의 중요성 판단하기가 쉽지 않음
- 불균형 데이터(imbalanced data)에 취약
범주형 변수 의 분리 규칙
- 불순도(impurity)를 크게 감소시키는 방식으로 분할
- 카이제곱 통계량: 실제와 기대의 차이 (: 관찰 빈도, : 기대 빈도)
- 지니 지수: 모든 경우의 확률이 고를 경우 가장 높아짐(가장 많이 사용)
- 엔트로피: 열역학에서 유래한 무질서도
- 지니 지수와 비슷하나 로그가 포함되어 약간 더 계산이 많음
의사결정 나무 실습
- 과대 적합
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(random_state = 42)
model.fit(X_train, y_train)
model.score(X_train, y_train)
model.score(X_test, y_test)
- 깊이를 제한해서 과대 적합을 억제
model = DecisionTreeClassifier(max_depth = 5, random_state=42)
시각화
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10)) # 그림 크기 가로 20, 세로 10
plot_tree(model, fontsize=10, filled=True) # 글꼴 크기 10, 색칠
plt.savefig("tree.png") # 그림 저장
퀴즈
사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.