'x가 6보다 큰가요?' — 스무고개 하듯 질문을 던져 데이터를 나누는 모델이에요. 좋은 질문의 기준은 나눈 뒤 얼마나 덜 섞이는가!
🖱️ 캔버스를 클릭하면 선택한 색(🔵/🔴)의 점이 추가되고, 점 근처를 클릭하면 삭제돼요.
가로축 x, 세로축 y (둘 다 0~10). 수동 모드에서는 보라 점선이 내가 만든 질문 하나, 자동 모드에서는 색칠된 영역이 트리의 예측(파랑 영역 = 🔵로 예측)이고 보라 선이 트리가 고른 질문들이에요. 영역 경계가 항상 축과 평행한 직선인 것도 관전 포인트!
불순도 감소(지니 이득) = 분할 전 Gini − 분할 후 Gini. 클수록 데이터를 잘 가르는 좋은 질문이에요.
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
import numpy as np
# X: (n, 2) 좌표 데이터, y: 0(빨강) / 1(파랑) 라벨
X = np.array(coords) # 예: [[7.2, 6.1], [2.3, 4.5], ...]
y = np.array(labels)
# max_depth로 트리 깊이를 제한해 과적합을 막아요
model = DecisionTreeClassifier(criterion="gini", max_depth=2)
model.fit(X, y) # 학습: 최선의 질문을 재귀적으로 찾기
print("정확도:", model.score(X, y))
# 학습된 트리를 그림으로 확인 (이 페이지의 트리 구조 카드와 같아요)
plt.figure(figsize=(8, 5))
plot_tree(model, feature_names=["x", "y"], filled=True)
plt.show()