의사 결정 트리(Decision Tree)는 트리 구조를 사용하여 분류 및 회귀 작업을 수행하는 지도 학습 알고리즘이다. 이는 데이터를 특정 규칙에 따라 재귀적으로 분할하여 예측을 수행하는 모델이다.
1. 분할 기준 선택 : 가장 좋은 특성을 찾아서 해당 특성을 기준으로 데이터를 분할한다. 분할 기준으로는 엔트로피, 지니 불순도 등이 사용된다.
2. 재귀적 분할 : 처음 분할 이후에도 다시 분할될 때까지 데이터를 부분 집합으로 분할한다. 이 과정은 가장 중요한 특성을 기반으로 계속해서 진행된다.
3. 최종 예측 : 리프 노드에 도달하면 해당 리프 노드의 클래스 레이블이 예측값으로 사용된다.
의사 결정 트리는 직관적이고 해석하기 쉬운 특성 때문에 많은 분야에서 사용되며, 앙상블 기법인 랜덤 포레스트(Random Forest)나 그래디언트 부스팅(Gradient Boosting)과 같은 기법에서도 중요한 구성 요소로 사용된다.
앙상블 기법에 대해서는 다음 포스팅에서 작성하겠다 -> 앙상블 기법
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
# 아이리스 데이터셋 불러오기
iris = load_iris()
X = iris.data
y = iris.target
class_names = iris.target_names.tolist() # 타겟 이름을 리스트로 변환
# 데이터를 훈련 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 의사 결정 트리 모델 초기화 및 학습
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)
# 테스트 세트로 예측 수행
y_pred = clf.predict(X_test)
# 정확도 계산
accuracy = accuracy_score(y_test, y_pred)
print(f'정확도: {accuracy:.4f}')
# 의사 결정 트리 시각화
plt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=class_names)
plt.show()
이 코드는 Scikit-learn을 사용하여 붓꽃 데이터셋을 의사 결정 트리로 분류하는 과정을 담고 있다.
load_iris()
를 사용하여 붓꽃 데이터를 불러온다.train_test_split()
함수를 사용하여 데이터를 훈련 세트와 테스트 세트로 분할한다. 이는 모델의 일반화 성능을 평가하기 위함이다.DecisionTreeClassifier()
를 사용하여 의사 결정 트리 모델을 초기화하고, fit()
메서드를 통해 훈련 데이터에 모델을 학습시킨다.predict()
메서드를 사용하여 테스트 데이터에 대한 예측을 수행하고, accuracy_score()
함수를 사용하여 예측값의 정확도를 계산했한다.plot_tree
메서드를 사용하여 의사 결정 트리를 시각화한다.이 코드는 간단하게 기본적인 분류 모델을 구축하고 성능을 평가하는 방법을 보여주는데, 실제 프로젝트에서는 데이터 전처리, 모델 튜닝 등 다양한 추가 단계가 필요할 수 있다.