배깅
더 많은 작업
- Bagging; Bootstrap Aggregating; 배깅
- 학습 데이터에서 부트스트랩 표본을 여러 번 뽑아 각각 모형을 학습하고, 그 예측을 투표나 평균으로 합치는 앙상블 기법
Breiman이 1996년에 제안했다. 이름 그대로 부트스트랩(Bootstrap)과 결합(Aggregating)을 합친 말이다. 의사결정 나무처럼 데이터가 조금만 바뀌어도 결과가 크게 달라지는 불안정한 모형에 특히 효과가 크다.
- 크기가 n인 학습 데이터에서 복원 추출로 n개를 뽑아 부트스트랩 표본을 만든다
- 이를 B번 반복해 B개의 표본을 만들고, 표본마다 같은 종류의 기본 모형을 독립적으로 학습한다
- 예측을 합친다. 분류는 다수결 투표(또는 확률 평균), 회귀는 평균을 쓴다
각 모형은 서로 독립이므로 병렬로 학습할 수 있다.
복원 추출이므로 한 표본 안에 같은 관측치가 여러 번 들어가고, 어떤 관측치는 한 번도 뽑히지 않는다. 특정 관측치가 n번 모두 뽑히지 않을 확률은
이다. 즉 표본 하나에는 원래 데이터의 약 63.2%만 들어가고 약 36.8%는 빠진다. 빠진 데이터를 OOB(Out-of-Bag) 데이터라 한다. 각 관측치를 그것을 학습에 쓰지 않은 모형들로만 예측해 성능을 재면, 별도 검증 데이터나 교차 검증 없이도 일반화 성능을 추정할 수 있다. 이것이 OOB 오차다.
배깅은 주로 분산을 줄인다. 분산이 이고 서로 상관계수가 인 B개 모형 예측을 평균하면 그 분산은
이다. B를 늘리면 둘째 항은 0에 가까워지지만 첫째 항은 남는다. 따라서 모형 간 상관이 낮을수록 효과가 크다. 반면 편향은 기본 모형과 거의 같으므로, 깊게 자란(편향이 낮고 분산이 큰) 트리를 기본 모형으로 쓰는 것이 보통이다. B를 늘려도 과적합이 심해지지는 않는다.
랜덤 포레스트는 의사결정 나무 배깅에 분할마다 후보 변수를 무작위로 일부만 고르는 과정을 더한 것이다. 특정 강한 변수가 모든 트리의 위쪽 분할을 차지하는 일을 막아 트리 간 상관 를 낮추고, 그 결과 분산이 더 줄어든다.
| 구분 | 배깅(트리) | 랜덤 포레스트 |
|---|---|---|
| 데이터 샘플링 | 부트스트랩 | 부트스트랩 |
| 분할 후보 변수 | 전체 변수 | 무작위로 고른 일부 변수 |
| 트리 간 상관 | 상대적으로 높음 | 낮음 |
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, stratify=y, random_state=42)
bag = BaggingClassifier(
estimator=DecisionTreeClassifier(), # 1.2 미만 버전은 base_estimator
n_estimators=100, # 모형 개수 B
max_samples=1.0, # 표본 크기(원 데이터 대비 비율)
bootstrap=True, # 복원 추출
oob_score=True, # OOB 점수 계산
n_jobs=-1, random_state=42)
bag.fit(X_train, y_train)
print("OOB 정확도 :", bag.oob_score_)
print("테스트 정확도:", bag.score(X_test, y_test))
bootstrap=False로 비복원 추출을 하면 페이스팅(Pasting)이 된다. max_features로 변수까지 무작위로 뽑을 수 있다. 회귀는 BaggingRegressor를 쓴다.
- 복원 추출, 병렬 학습, 분류는 투표·회귀는 평균, 분산 감소라는 특징
- 부트스트랩 표본에 뽑히지 않는 비율 약 36.8%(OOB)와 OOB 오차의 용도
- 랜덤 포레스트 = 배깅 + 분할별 변수 무작위 선택. 부스팅(순차 학습, 편향 감소)과 구분