단점
과적합으로 모델 성능이 떨어지기 쉬움
트리 깊이 제한이 필요 (=가지치기,튜닝)
Root Node: 뿌리, 시작 마디
Child Node: 자식, 하나로부터 분리된 2개 이상 마디
Parent Node: 부모, 주어진 마디의 상위 마디
Terminal Node: 끝, 자식이 없는 마디 (=Leaf Node)
Internal Node: 중간, 부모 마디와 자식 마디가 모두 있는 마디
Branch: 가지, 연결되어 있는 2개 이상의 마디 집합
Depth: 깊이, 뿌리 마디로부터 끝 마디까지 연결된 마디 개수(오른쪽 트리의 경우 5)

결정트리 분류 - 마지막 노드에 있는 샘플들의 최빈값을 예측값으로 반환
➡️ 불순도
결정트리 회귀 - 평균을 예측값으로 반환
➡️ MSE
- 모든 속성에 대해 분할한 후 정보 이득 계산
- 정보 이득이 가장 큰 속성부터 분할
💡 정보이득이 크다 = 어떤 속성으로 분할할때 불순도가 줄어든다
정보이득의 최대화 ➡️ 불순도의 감소 ➡️ 엔트로피의 감소
💡목적 : 일반화 시키기위해, 과적합이 일어나지 않게하기위해
# 시각화 모듈 불러오기
from sklearn.tree import plot_tree
fig = plt.figure(figsize=(12, 10))
plot_tree(model,
filled=True,
feature_names=list(x),
class_names=['setosa', 'versicolor', 'virginica'],
fontsize=10)
plt.show()
# 시각화 모듈 불러오기
from sklearn.tree import export_graphviz
# 이미지 파일 만들기
export_graphviz(model,
filled=True,
feature_names=list(x),
class_names=['setosa', 'versicolor', 'virginica'],
rounded=True,
precision=3,
out_file='tree.dot')
!dot tree.dot -Tpng -otree.png -Gdpi=300
# 이미지 파일 로딩
from IPython.display import Image
Image(filename='tree.png', width=600)
• featureimportances속성 값으로 변수 중요도 확인
• Feature 순서대로 값을 가짐
• 값이 클 수록 Feature의 중요도가 높음
• 트리 구성에 중요한 역할을 한 변수를 시각화해서 확인할 수 있음
• 가로 막대 또는 세로 막대 그래프로 시각화
# 변수 중요도 시각화
plt.figure(figsize=(6, 8))
plt.barh(list(x), model.feature_importances_)
plt.ylabel('Features')
plt.xlabel('Importances')
plt.show()
• 알고리즘 함수: sklearn.tree.DecisionTreeRegressor
• 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등
# 불러오기
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error, r2_score
# 선언하기
model = DecisionTreeRegressor(max_depth=5)
# 학습하기
model.fit(x_train, y_train)
# 예측하기
y_pred = model.predict(x_test)
# 평가하기
print(mean_absolute_error(y_test, y_pred))
print(r2_score(y_test, y_pred))
• 알고리즘 함수: sklearn.tree.DecisionTreeClassifier
• 성능평가 함수: sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report 등
# 불러오기
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report
# 선언하기
model = DecisionTreeClassifier(max_depth=5)
# 학습하기
model.fit(x_train, y_train)
# 예측하기
y_pred = model.predict(x_test)
# 평가하기
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))