개발로그필름

[ML] 결정트리 단일 모델과 배깅(Bagging) 앙상블 모델을 비교 본문

ML

[ML] 결정트리 단일 모델과 배깅(Bagging) 앙상블 모델을 비교

yuullog 2025. 5. 27. 17:16
728x90
반응형
SMALL
반응형

 

 

 

 

 

 

전체 목적

  • 유방암 데이터셋
  1. 결정트리 단일 모델을 학습하고
  2. Bagging 앙상블을 적용해서
  3. 성능(정확도)을 비교해보는 코드

 

 

1. 데이터 불러오기 & 분할

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
  • load_breast_cancer()는 유명한 유방암 분류 데이터셋
  • X: 입력 변수 (30개 피처)
  • y: 라벨 (0 = 양성, 1 = 악성)

 

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y
)
  • 전체 데이터의 80%를 훈련 데이터, 20%를 테스트 데이터로 나누기
  • stratify=y: 양성/악성 비율을 유지하면서 나누기

 

 

2. 단일 결정트리 모델 학습

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

tree = DecisionTreeClassifier()
tree.fit(X_train, y_train)
  • 기본 설정의 결정트리 모델을 학습

 

tree_pred = tree.predict(X_test)
acc_tree = accuracy_score(y_test, tree_pred)
  • 테스트 데이터로 예측해보고 정확도(acc_tree)를 계산

 

 

 

3. Bagging 앙상블 모델 학습

from sklearn.ensemble import BaggingClassifier

bag = BaggingClassifier(
    estimator=DecisionTreeClassifier(),  # 사용할 기본 모델 = 결정트리
    n_estimators=100,     # 결정트리 100개 사용
    max_samples=100,      # 각 트리에 사용할 샘플 수 = 100개씩
    bootstrap=True,       # 복원 추출(부트스트랩) 사용
    n_jobs=-1             # CPU 모두 사용
)
  • 결정트리 100개를 만드는데, 매번 훈련 데이터 중 100개씩을 복원추출해서 각 트리를 학습시킨다
  • 각 모델이 서로 다른 데이터를 학습하게 되는 것
  • 예측은 100개의 결정트리의 투표 결과(다수결)로 결정됨

 

bag.fit(X_train, y_train)
bag_pred = bag.predict(X_test)
acc_bag = accuracy_score(y_test, bag_pred)
  • 앙상블 모델 학습 후 테스트 데이터로 예측 & 정확도 측정

 

 

 4. 결과 비교 출력

print(f'단일 결정트리 정확도:{acc_tree:.3f}')
print(f'앙상블 모델 정확도:{acc_bag:.3f}')

 

출력 예시

단일 결정트리 정확도:0.912
앙상블 모델 정확도:0.956

보통은 앙상블 모델이 더 정확도 높게 나온다, 왜냐하면 다양한 데이터를 학습하고 과적합 위험을 줄여주기 때문

 

 

 

요약 정리

 

구성 설명
DecisionTreeClassifier() 하나의 결정트리 모델
BaggingClassifier() 여러 개의 결정트리를 모아서 앙상블
max_samples 각 트리가 학습할 데이터 샘플 수
bootstrap=True 복원추출 방식 (부트스트랩) 사용
n_estimators 결정트리 몇 개 쓸 건지 설정
n_jobs=-1 CPU를 모두 사용해서 병렬 처리
accuracy_score() 모델 성능(정확도) 측정 함수

 

  • max_samples=100 → 전체 훈련 데이터가 500개라면 그중 100개만 복원추출해서 트리 1개 학습
  • bootstrap=False로 하면 부트스트랩 X → 배깅 효과 감소
  • base_estimator는 다양한 모델로 바꿀 수 있다 (ex. SVM, KNN 등)

 

 

 

 

 

 

 

반응형
LIST

'ML' 카테고리의 다른 글

[ML] 그리드서치(Grid Search)  (0) 2025.05.28
[ML] 랜덤포레스트(Random Forest)  (0) 2025.05.27
[ML] stratify 옵션 이해하기  (0) 2025.05.26
[ML] 부트스트랩(복원추출)  (0) 2025.05.26
[ML] 앙상블이란?  (0) 2025.05.25
Comments