의사결정나무 란?
의사결정나무(Decision Tree) 는 머신러닝에서 널리 사용되는 지도학습 알고리즘으로,
데이터를 계층적으로 나누어 예측하거나 분류하는 데 사용된다.
직관적이고 시작적으로 이해하기 쉬운구조를 가지며, 분류와 회귀 문제 모두에 활용될 수 있다.
트리구조를 가지며, 각 내부 노드는 데이터의 특정 feature 에 대한 테스트를 나타내고, 각 가지(branch)는 테스트 결과를 나타내며, 각 리프노드(leaf) 는 클래스레이블을 나타낸다
의사결정나무의 기본 개념
- 트리 구조:
- 루트 노드(Root Node): 트리의 최상단 노드로, 전체 데이터셋을 나타냅니다.
- 분기(Branch): 데이터를 특정 기준에 따라 나누는 과정.
- 내부 노드(Internal Node): 데이터를 나누는 기준(결정 규칙)이 포함된 노드.
- 리프 노드(Leaf Node): 최종적으로 예측값(또는 클래스)을 반환하는 노드.
- 의사결정 과정:
- 데이터를 순차적으로 분할하면서 결정 기준(규칙)을 설정합니다.
- 각 분기는 데이터의 특정 특성(feature)을 기준으로 나뉩니다.
- 최종적으로 리프 노드에 도달하면, 해당 노드에 속한 데이터의 클래스나 값을 예측합니다.
의사결정나무의 작동 방식
1. 특성 선택:
- 각 노드에서 데이터를 나누는 기준이 되는 특성을 선택합니다.
- 특성 선택의 목표는 데이터를 가장 잘 분리할 수 있는 기준을 찾는 것입니다.
2. 정보 이득(Information Gain):
- 특성 선택을 평가하는 기준 중 하나로, 데이터의 불확실성을 줄이는 정도를 측정합니다.
- 엔트로피를 사용하여 계산됩니다.
3. 지니 지수 (Gini Index):
- CART(Classification and Regression Tree) 알고리즘에서 사용하는 분할 기준입니다.
- 지니지수는 데이터의 불순도를 측정하며, 값이 낮을수록 더 잘 분리된 상태를 의미합니다
4. 최적의 분할 :
- 각 특성과 가능한 분할 기준을 평가하여, 정보 이득이나 지니 지수를 기준으로 최적의 분할을 선택합니다.
5. 종료 조건 :
- 트리 생성은 특정 종료 조건에 도달할 때까지 계속됩니다
- 리프 노드의 데이터가 모두 같은 클래스에 속할 때
- 더이상 분할할 데이터가 없을 때
- 트리가 최대 깊이에 도달했을 때
의사결정나무의 장점
- 직관적이고 해석 가능:
- 트리 구조가 사람에게 이해하기 쉬워, 예측 결과를 설명하기 좋습니다.
- 전처리가 거의 필요 없음:
- 데이터의 스케일 조정이나 정규화 없이 사용할 수 있습니다.
- 다목적 사용 가능:
- 분류와 회귀 문제에 모두 사용될 수 있습니다.
- 비선형 데이터 처리 가능:
- 데이터의 복잡한 비선형 관계도 모델링할 수 있습니다.
의사결정나무의 단점
- 과적합(Overfitting):
- 트리가 너무 깊어지면 학습 데이터에 지나치게 적합하게 되어 일반화 성능이 떨어질 수 있습니다.
- 이를 방지하기 위해 사전 가지치기(Pre-Pruning)나 사후 가지치기(Post-Pruning)를 사용합니다.
- 데이터에 민감:
- 작은 데이터 변경에도 트리 구조가 크게 바뀔 수 있습니다. 이를 해결하기 위해 앙상블 방법(랜덤 포레스트 등)을 사용할 수 있습니다.
- 분할 기준의 편향:
- 정보 이득은 클래스가 많을수록 특정 특성을 선호하는 경향이 있습니다.
- 차원의 저주:
- 고차원 데이터에서는 성능이 저하될 수 있습니다. 이런 경우 특성 선택이나 차원 축소를 고려해야 합니다.
의사결정나무의 개선 방법
- 가지치기(Pruning):
- 트리의 불필요한 분기를 제거하여 과적합을 방지합니다.
- 사전 가지치기: 트리 생성 중에 조건(최대 깊이, 최소 데이터 개수 등)을 설정하여 성장 제한.
- 사후 가지치기: 트리 생성 후 성능이 떨어지는 분기를 제거.
- 앙상블 방법:
- 랜덤 포레스트(Random Forest):
- 여러 개의 의사결정나무를 학습시켜 결과를 앙상블(다수결 또는 평균)하여 예측 성능을 향상.
- 그래디언트 부스팅(Gradient Boosting):
- 의사결정나무를 순차적으로 학습시켜 에러를 보완하는 방식.
- 랜덤 포레스트(Random Forest):
- 데이터 샘플링:
- 트리 학습 전 데이터 샘플링 또는 특성 선택을 통해 모델 성능을 개선.
의사결정나무의 활용 사례
- 의료 분야:
- 환자의 증상과 검사 결과를 기반으로 질병을 예측.
- 금융:
- 대출 상환 가능성 예측, 사기 탐지.
- 마케팅:
- 고객 분류, 구매 가능성 예측.
- 제조:
- 품질 관리, 오류 탐지.
의사결정나무의 한계와 대안
의사결정나무는 단독으로 사용하면 과적합 및 민감성 문제가 있지만, 이를 해결하기 위해 앙상블 기법(랜덤 포레스트, 그래디언트 부스팅)을 적용하면 강력하고 유연한 모델로 변모합니다. 데이터가 비교적 간단하거나 해석 가능성이 중요한 경우에는 의사결정나무 자체로도 충분히 유용합니다.
예시
- 데이터 로드 및 전처리
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 데이터 로드
data = load_breast_cancer()
X = data.data
y = data.target
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 데이터 스케일링
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
- 모델 학습
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
# 모델 생성 및 학습
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")
'AI > ML' 카테고리의 다른 글
[ML] 비지도학습 - 군집화모델 (계층적 군집화) (0) | 2024.12.29 |
---|---|
[ML] 비지도학습 - 군집화모델 (K-means Clustering) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (나이브 베이즈) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (KNN) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (SVM) (0) | 2024.12.29 |