개발로그필름
[ML] 결정트리 단일 모델과 배깅(Bagging) 앙상블 모델을 비교 본문
728x90
반응형
SMALL
반응형
전체 목적
- 유방암 데이터셋
- 결정트리 단일 모델을 학습하고
- Bagging 앙상블을 적용해서
- 성능(정확도)을 비교해보는 코드
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