의사 결정 트리(Decision Tree)는 지도 학습 알고리즘 중 하나로, 분류와 회귀 문제에 모두 사용될 수 있습니다. 이 알고리즘은 트리 구조를 사용하여 데이터를 분할하고 판단 기준을 결정하여 예측을 수행합니다.
알고리즘 동작 방식:
- 특성 선택: 먼저 가장 중요한 특성을 기준으로 데이터를 분할하는 특성을 선택합니다. 이는 정보 이득(information gain), 지니 불순도(Gini impurity) 등의 지표를 사용하여 결정됩니다.
- 트리 분할: 선택된 특성을 기준으로 데이터를 분할합니다. 각 분할은 데이터를 가장 잘 분류하는 방향으로 이루어집니다.
- 재귀적 분할: 분할된 하위 집합에 대해 재귀적으로 위 과정을 반복합니다. 이 과정은 분류가 완료될 때까지 계속됩니다.
- 리프 노드 할당: 분할이 더 이상 불가능하거나 특정 조건을 충족할 때마다 리프 노드(leaf node)에 클래스 레이블 또는 값이 할당됩니다.
주요 특징:
- 해석이 용이: 의사 결정 트리는 직관적이며 해석하기 쉬운 모델입니다. 이해하기 쉬운 규칙을 생성하므로 비전문가도 이해하기 쉽습니다.
- 비모수적(non-parametric): 의사 결정 트리는 모델을 학습하는 데에 별도의 파라미터가 필요하지 않습니다. 데이터를 분할하여 규칙을 생성합니다.
- 과적합 가능성: 의사 결정 트리는 과적합(overfitting)되기 쉽습니다. 따라서 적절한 가지치기(pruning) 또는 하이퍼파라미터 튜닝이 필요합니다.
- 이산적 결과: 의사 결정 트리는 특정 특성에 대한 이산적인 결과를 제공합니다. 각 리프 노드에서는 하나의 클래스 레이블 또는 값이 예측됩니다.
적용 분야:
- 분류 문제: 의사 결정 트리는 분류 문제에 널리 사용됩니다. 예를 들어, 고객 세분화, 질병 진단, 이상 감지 등에 사용될 수 있습니다.
- 회귀 문제: 의사 결정 트리는 회귀 문제에도 적용될 수 있습니다. 예를 들어, 주택 가격 예측, 수익 예측 등에 사용될 수 있습니다.
모델링
# 1단계: 불러오기
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report
# 2단계: 선언하기
model = DecisionTreeClassifier(random_state=1, max_depth=5)
# 3단계: 학습하기
model.fit(x_train, y_train)
# 4단계: 예측하기
y_pred = model.predict(x_test)
# 5단계 평가하기
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
트리시각화
# 시각화 모듈 불러오기
from sklearn.tree import export_graphviz
from IPython.display import Image
# 이미지 파일 만들기
export_graphviz(model, # 모델 이름
out_file='tree.dot', # 파일 이름
feature_names=list(x), # Feature 이름
class_names=['die', 'survived'], # Target Class 이름 (분류인 경우만 지정)
rounded=True, # 둥근 테두리
precision=2, # 불순도 소숫점 자리수
filled=True) # 박스 내부 채우기
# 파일 변환
!dot tree.dot -Tpng -otree.png -Gdpi=300
# 이미지 파일 표시
Image(filename='tree.png')
의사 결정 트리는 강력하고 해석하기 쉬운 모델로, 분류와 회귀 문제에 널리 사용됩니다. 그러나 과적합 가능성이 있으므로 적절한 가지치기나 하이퍼파라미터 튜닝이 필요합니다.
'PYTHON > 머신러닝' 카테고리의 다른 글
[PYTHON] 그리드 탐색(Grid Search) (0) | 2024.04.28 |
---|---|
[PYTHON] 로지스틱 회귀(Logistic Regression) (0) | 2024.04.28 |
[PYTHON] KNN K-최근접 이웃(K-Nearest Neighbors) (1) | 2024.04.28 |
[PYTHON] 선형회귀 LinearRegression (0) | 2024.04.28 |
[PYTHON] 머신러닝 기초 (0) | 2024.04.16 |