배깅 Bagging, 언제나 처음처럼
Ensemble
앞선 포스트에서는 앙상블기법을 사용하기 위해서는 다양성(Diversity)를 만족했어야 했는데, 그 방법에는 Data를 다르게주어 모델을 다르게하는 방법과 모델의 지표를 제공해서 다른 모델을 만드는 방법을 소개했습니다. 이번 포스트에서는 Data를 다르게 주는 방법, Bagging에 대해서 다룹니다. 이 포스트에서는 이전 포스트의 내용을 기반으로 기술합니다.
비복원추출
Cross Validation에서 K-fold방식으로 데이터를 나누는 방법이 있었습니다. 이와 같은 방법으로 K-fold을 통해서 모델을 만들 때는, 데이터를 K개로 나눈 뒤에 각각의 데이터 중 하나를 빼서 모델을 만드는 방식입니다. 이렇게해서 K개의 모델이 만들어지게됩니다. 뽑았던 것을 다시 뽑지 않는, 복원을 하지않는 비복원추출입니다.
앞선 포스트에서 각 모델의 에러가 서로간에 독립이면, 에러의 평균에 1/m이라고했습니다. 여기서는 1/K이 됩니다. 하지만 이 모델은 정말 독립이라고 할 수 없습니다. 왜냐하면 어떤 데이터를 선택하더라도 (K-2)개의 데이터를 공유하고있기 때문입니다. 독립성이 보장되어있지 않은 것입니다.
이렇게 추출된 데이터를 통해서 K개의 모델을 만들어서 $\delta$(Aggregating)함수에 적용합니다. 분류에서는 델타가 Voting이 될 수도 있고, 회귀에서는 평균이 될 수 있습니다.
K-fold는 어찌 됐건 전체데이터를 사용하지 못합니다. 1/K만큼 데이터의 손실이 있는 것입니다. 그렇다고 K를 무작정 크게해버리면, 너무 작게 쪼개게 되어 의미가 없어집니다.
복원추출, Bagging
이러한 문제점으로 출발하게 된 것이 복원추출입니다. 데이터를 추출하고 다시 데이터셋에다가 넣는 방법입니다. 예를 들어보겠습니다. 숫자가 1부터 12까지 있다고합시다. 비복원 추출을 할 경우, 뽑았던 것은 뽑지 않습니다. K를 3으로 한다면, [1,2,3,4],[5,6,7,8],[9,10,11,12]와 같이 나누어질 것입니다. 복원추출은 한번 뽑았던 것도 다시 넣고 뽑습니다.
1을 뽑아도, 다시 1부터 10까지 숫자중에 뽑을 수 있을 것입니다. 아마 이렇게 될 수 있을 것같습니다. [1,1,3,9],[2,5,7,10],[2,5,11,12],[5,4,6,9]
이렇게 복원추출된 각 데이터 셋들은 Bootstrap이라고 부릅니다. 복원추출의 가장 큰 장점은 무한하게 Bootstrap set을 늘릴 수 있습니다. 그리고 Bootstrap들을 Aggregating시킨 것을 Bagging(Bootstrap aggregating)이라고 합니다.
OOB (Out of Bag)
이렇게 무한하게 늘리다보면 확률적으로 뽑히지 않는 값들이 있는데, 이는 0.368에 수렴하게 됩니다. 데이터의 36.8%는 아무리 뽑아도 뽑히지 않는 값들입니다. 이 값들을 OOB(Out of Bag)이라고 합니다. 데이터가 있는데도 사용하지 못한다니 너무 아깝지 않나요? 이 데이터를 가지고 검증을 합니다. 그냥 단순히 데이터를 나누는 것보다, 랜덤하게 데이터를 나눔으로써 데이터를 왜곡시키게 되고 이는 검증 신뢰도를 높이는 역할을 합니다. 전체데이터를 오롯이 쓸 수 있게 되는 것입니다 !
앞선 포스트에서 배깅은 Variance를 줄이는데 효과적이라고 했습니다. 복잡성이 높은 모델들의 분산을 낮춰줄 수 있는 것이죠.
Higher Complexity & Low Bias & High Variance를 가진 모델로는
- Decision Tree, Support Vector Machine, K-NN with small K 등이 있습니다.
Aggregating
10개의 모델을 만들었다면, 이제 취합을 통해서 예측치를 내야합니다. 위의 예시는 분류문제입니다. 1로 예측한 모델의 갯수가 6개이므로 1로예측하게됩니다. Training Accuracy(OOB Accuracy)로 결정하게 할 수도 있겠죠, 그래도 1로예측하게됩니다. 각 범주별로 확률을 내서 결정할 수도 있습니다. 이처럼 너무나도 다양한 방법이 존재하고 어느 하나가 항상 더 좋다라는 방법은 없습니다.
Stacking
위에서 방법이 너무 많았습니다. 아예 함수로 만들어 버리는 것은 어떨까요? 각각 만들
어진 모델을 인자로 받는 새로운 모델을 만드는 것입니다 ! 각 모델이 예측에대한 결과를 내면, Meta-classifier라는 새로운 모델이 이 예측값들을 인자로 받아서 만드는 방법을 Stacking이라고 합니다. 이런 Layer를 많이 만들어줘서 딥러닝으로 사용하기도 합니다!
참고자료
'인공지능 > 앙상블' 카테고리의 다른 글
[Ensemble] XGBoost, 극한의 가성비 (2) | 2021.02.14 |
---|---|
[Ensemble] Gradient Boosting, 차근차근 (0) | 2021.02.12 |
[Ensemble] Ada Boost, 모델의 오답노트 (0) | 2021.02.11 |
[Ensemble] 랜덤 포레스트, 나무가 이루는 숲 (0) | 2021.02.11 |
[Ensemble] 백지장도 맞들면 낫다, 앙상블 OVERVIEW (0) | 2021.02.10 |
댓글