여러 나무를 쓴다는 설명만으로는 부족합니다
배깅은 여러 표본에서 모델을 각각 학습해 예측을 모으고, 부스팅은 앞 단계의 오류나 손실을 다음 학습에 반영합니다. 랜덤포레스트는 배깅에 더해 각 분할에서 검토할 후보 변수도 무작위로 고릅니다.
배깅의 독립 학습은 모델의 예측값들이 통계적으로 완전히 독립이라는 뜻은 아닙니다. 원자료를 공유하므로 예측이 서로 비슷할 수 있습니다.
| 방식 | 자료나 학습의 변화 | 앞 단계 결과가 필요한가 | 결합의 예 |
|---|---|---|---|
| 배깅 | 복원추출로 여러 학습 표본 구성 | 각 모델 학습에 필요하지 않음 | 회귀 예측 평균, 분류 투표 또는 확률 평균 |
| 랜덤포레스트 | 표본 추출에 더해 분할 후보 변수도 무작위 선택 | 앞 나무 결과가 필요하지 않음 | 여러 나무의 예측 결합 |
| 부스팅 | 이전 단계의 오류나 손실을 다음 학습에 반영 | 필요함 | 순차적으로 얻은 모델의 가중 결합 |
표에서는 대표적인 원리만 비교했습니다. 라이브러리 설정에 따라 추출 방식과 결합 규칙이 달라질 수 있으므로, 분류 앙상블이면 언제나 다수결이라고 단정하지는 않습니다.
배깅은 다시 뽑은 표본마다 모델을 만듭니다
배깅은 Bootstrap Aggregating을 줄인 이름입니다. 부트스트랩은 자료에서 관측값을 뽑은 뒤 다시 넣고 뽑는 복원추출입니다. 원자료 번호가 1, 2, 3, 4, 5라면 2, 2, 3, 5, 5와 같은 표본이 나올 수 있습니다. 전체 추출 개수는 같아도 특정 관측값은 여러 번 들어가고 다른 관측값은 빠집니다. 자료를 서로 겹치지 않는 다섯 묶음으로 자르는 것과 다릅니다.
이런 표본을 여러 개 만들어 각각 모델을 학습시킵니다. 회귀나무 세 개가 같은 새 관측값에 8, 11, 11을 예측했다면 단순 평균 예측은 (8+11+11)/3=10입니다. 각 나무의 오차가 서로 다르게 나타날 때 평균이 한 나무의 큰 흔들림을 줄일 수 있습니다. 모든 모델이 같은 방향으로 똑같이 틀리면 평균만으로 오류가 없어지지는 않습니다.
분류에서는 범주 투표를 쓰거나 각 범주의 확률을 평균 내는 방법이 있습니다. scikit-learn의 랜덤포레스트 분류기는 나무의 확률 예측을 평균 냅니다. 나무가 낸 최종 범주를 한 표씩 세는 방식과 확률 평균은 결과가 다를 수 있으므로 문제에 결합 방법이 주어지면 그 방법을 따릅니다.
랜덤포레스트는 나무들이 너무 닮지 않게 합니다
설명력이 강한 변수 하나가 있으면 표본을 다시 뽑아도 여러 나무가 그 변수를 첫 분할에 사용할 수 있습니다. 나무들이 비슷하면 예측 오차도 비슷해져 결합의 이점이 작아집니다. 랜덤포레스트는 각 분할에서 전체 변수 대신 무작위로 고른 일부 변수를 후보로 검토합니다. 표본뿐 아니라 후보 변수도 바꿔 나무들이 덜 닮게 하는 장치입니다.
설명변수가 9개이고 한 분할에서 3개를 후보로 검토한다고 합시다. 어떤 노드에서는 A, D, H를 비교하고 다음 노드에서는 B, E, G를 비교할 수 있습니다. 후보 수 3은 나무가 세 개라는 뜻도, 완성된 나무 전체가 변수 세 개만 쓴다는 뜻도 아닙니다. 분할마다 후보 집합을 새로 고른다는 점에 주목하세요.
후보 변수를 너무 줄이면 개별 나무가 중요한 정보를 놓칠 수 있습니다. 나무 수, 깊이, 잎의 최소 표본 수와 함께 검증 결과를 보며 설정을 선택합니다. 랜덤포레스트라는 이름만으로 과적합이 불가능해지거나 모든 자료에서 단일 나무보다 좋아지는 것은 아닙니다.
부스팅은 앞의 예측에서 남은 문제를 이어받습니다
부스팅 알고리즘마다 예측을 보정하는 방식은 다릅니다. AdaBoost 분류는 잘못 분류한 관측값에 다음 학습에서 더 관심을 두도록 가중치를 조정합니다. 그래디언트 부스팅은 손실이 줄어드는 방향을 나타내는 음의 기울기를 다음 모델이 학습합니다. 제곱오차 회귀에서는 이 대상이 잔차와 연결됩니다.
학습용 예로 실제 값이 10인데 현재 예측이 6이라고 합시다. 잔차는 실제 값에서 예측값을 뺀 4입니다. 다음 회귀나무가 이 관측값에서 보정값 3을 내고 학습률이 0.2라면 예측을 6+0.2×3=6.6으로 갱신합니다. 새 잔차는 10−6.6=3.4입니다. 새 나무의 예측 3을 기존 예측 6과 단순 평균 내는 계산이 아닙니다.
학습률은 새 모델의 기여를 얼마나 반영할지 조절합니다. 작은 학습률은 한 번에 움직이는 폭을 줄이지만 같은 수준까지 학습하는 데 더 많은 단계가 필요할 수 있습니다. 단계 수를 무작정 늘리면 학습 자료의 잡음까지 따라갈 수 있어 검증 점수와 조기 종료 조건을 함께 봅니다. 모든 부스팅을 잔차만 반복해서 학습한다고 외우면 AdaBoost의 표본 가중치 설명과 혼동하게 됩니다.
별도 학습과 순차 보정을 상황에서 구별합니다
배깅은 각자 풀어 모으고 부스팅은 앞에서 남긴 오류를 이어받는다고 정리해 보세요. 배깅은 여러 부트스트랩 표본을 나란히 놓는 장면이고 부스팅은 현재 예측을 고친 뒤 다음 단계로 넘기는 장면입니다. 이 설명은 다음 학습이 앞 단계의 결과를 필요로 하는지 구분한 것입니다. 부스팅을 구현한 프로그램 내부에서 어떤 연산도 병렬 처리할 수 없다는 뜻은 아닙니다.
새 문제에서 복원추출만 보이면 부스팅이라고 고르지 않습니다. 앞 단계의 오차를 다음 단계가 실제로 쓰는지 확인하세요. 랜덤포레스트를 찾는 단서는 여러 나무뿐 아니라 분할 후보 변수의 무작위 선택입니다.
실제 모델은 같은 데이터 분할과 같은 지표로 비교하세요. 그래야 평가 조건의 차이를 학습 방식의 성능 차이로 오해하지 않습니다.
핵심 정리와 실수 점검
핵심 정리
- 배깅은 복원추출한 여러 표본으로 모델을 따로 학습하고 예측을 결합합니다.
- 랜덤포레스트는 각 분할에서 후보 변수를 무작위로 제한해 나무들의 유사성을 줄입니다.
- 부스팅은 앞 단계의 오류나 손실을 반영하며 학습률과 단계 수를 함께 조절합니다.
놓치기 쉬운 지점
- 배깅의 별도 학습을 예측값 사이에 상관관계가 전혀 없다는 뜻으로 해석하는 실수
- 모든 부스팅이 같은 잔차 또는 같은 표본 가중치 방식으로 학습한다고 외우는 실수
확인할 내용
- 다음 모델이 앞 모델의 예측이나 오류를 사용하는지 확인한다.
- 변수 후보 수와 나무 개수를 구분한다.
- 주어진 결합식이 단순 평균인지 가중 보정인지 확인한다.
이해한 내용 확인하기
직접 작성한 학습용 문항입니다. 공식 기출문제가 아닙니다.
Q1. 원자료가 1, 2, 3, 4인데 복원추출 결과가 2, 2, 4, 4입니다. 중복이 있으므로 배깅 표본으로 잘못 뽑은 것인가요?
생각한 뒤 해설 보기
아닙니다. 복원추출에서는 중복 관측값과 한 번도 뽑히지 않은 관측값이 생길 수 있습니다. 중복 없이 자료를 나누는 분할과 다릅니다.
Q2. 회귀 배깅의 세 모델 예측이 7, 9, 14이고 단순 평균 규칙을 씁니다. 결합 예측은 얼마인가요?
생각한 뒤 해설 보기
(7+9+14)/3=10입니다. 14라는 예측만 고르거나 차례로 보정하는 방식이 아닙니다.
Q3. 전체 변수 16개 중 각 분할에서 4개를 후보로 고릅니다. 이 설명으로 나무가 4개라는 결론을 내릴 수 있나요?
생각한 뒤 해설 보기
아닙니다. 4는 분할 후보 변수 수입니다. 나무 개수는 별도로 정합니다. 각 분할에서 후보를 새로 선택할 수 있습니다.
Q4. 현재 예측 5에 다음 모델의 보정값 −2를 학습률 0.1로 더합니다. 새 예측은 얼마인가요?
생각한 뒤 해설 보기
5+0.1×(−2)=4.8입니다. 보정값이 음수이므로 예측이 줄어듭니다. 두 모델 출력의 단순 평균 1.5가 아닙니다.
Q5. 이전 단계에서 잘못 분류한 관측값의 가중치를 조정해 다음 분류기가 더 집중하도록 합니다. 배깅과 AdaBoost 중 어떤 설명에 가깝나요?
생각한 뒤 해설 보기
AdaBoost입니다. 앞 단계의 오류를 이용해 다음 학습의 표본 가중치를 바꿉니다. 단순히 자료를 다시 뽑아 별도로 학습하는 배깅과 구분합니다.
더 궁금한 점
랜덤포레스트도 배깅 계열인가요?
대표적으로 배깅 계열의 나무 앙상블로 이해합니다. 표본을 바꿔 여러 나무를 만들고 각 분할에서 후보 변수를 무작위로 선택하는 장치를 더합니다. 실제 구현은 부트스트랩 사용 여부 등 설정을 함께 확인합니다.
부스팅은 언제나 배깅보다 정확한가요?
그렇지 않습니다. 자료의 크기와 잡음, 모델 설정, 평가 지표에 따라 결과가 달라집니다. 같은 평가 조건에서 비교하고 해석 가능성과 학습 비용도 함께 봅니다.
참고 자료와 확인 범위
- scikit-learn 앙상블 학습 ↗
배깅, 랜덤포레스트의 분할 후보 변수, 확률 평균과 그래디언트 부스팅의 손실별 학습을 확인했습니다.
- Stanford 배깅과 랜덤포레스트, 부스팅 강의 ↗
복원추출과 예측 평균, 나무 사이의 유사성, 학습률을 사용한 순차 보정 원리를 확인했습니다.
- scikit-learn AdaBoostClassifier ↗
오분류한 관측값의 가중치를 다음 학습에 반영하는 AdaBoost의 동작을 확인했습니다.