본문 바로가기
인공지능/앙상블

[Ensemble] 배깅, 언제나 처음처럼

by EXUPERY 2021. 2. 10.
반응형

 

배깅 Bagging, 언제나 처음처럼

Ensemble

 

 


 

앞선 포스트에서는 앙상블기법을 사용하기 위해서는 다양성(Diversity)를 만족했어야 했는데, 그 방법에는 Data를 다르게주어 모델을 다르게하는 방법과 모델의 지표를 제공해서 다른 모델을 만드는 방법을 소개했습니다. 이번 포스트에서는 Data를 다르게 주는 방법, Bagging에 대해서 다룹니다. 이 포스트에서는 이전 포스트의 내용을 기반으로 기술합니다.

 

[Ensemble] 백지장도 맞들면 낫다, 앙상블 OVERVIEW

백지장도 맞들면 낫다, 앙상블 OVERVIEW Ensemble 앙상블 Ensemble 모든 데이터에서 가장 좋은 성능을 내는 모델이 있을까요? 지금까지 연구자들이 낸 답은 '없다' 입니다. 각 데이터마다 모델의 성능

exupery-1.tistory.com

 

 

 

비복원추출

 

Cross Validation에서 K-fold방식으로 데이터를 나누는 방법이 있었습니다. 이와 같은 방법으로 K-fold을 통해서 모델을 만들 때는, 데이터를 K개로 나눈 뒤에 각각의 데이터 중 하나를 빼서 모델을 만드는 방식입니다. 이렇게해서 K개의 모델이 만들어지게됩니다. 뽑았던 것을 다시 뽑지 않는, 복원을 하지않는 비복원추출입니다.

앞선 포스트에서 각 모델의 에러가 서로간에 독립이면, 에러의 평균에 1/m이라고했습니다. 여기서는 1/K이 됩니다. 하지만 이 모델은 정말 독립이라고 할 수 없습니다. 왜냐하면 어떤 데이터를 선택하더라도 (K-2)개의 데이터를 공유하고있기 때문입니다. 독립성이 보장되어있지 않은 것입니다. 

 

이렇게 추출된 데이터를 통해서 K개의 모델을 만들어서 $\delta$(Aggregating)함수에 적용합니다. 분류에서는 델타가 Voting이 될 수도 있고, 회귀에서는 평균이 될 수 있습니다.

 

K-fold는 어찌 됐건 전체데이터를 사용하지 못합니다. 1/K만큼 데이터의 손실이 있는 것입니다. 그렇다고 K를 무작정 크게해버리면, 너무 작게 쪼개게 되어 의미가 없어집니다.

 

 

 

복원추출, Bagging

https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205

이러한 문제점으로 출발하게 된 것이 복원추출입니다. 데이터를 추출하고 다시 데이터셋에다가 넣는 방법입니다. 예를 들어보겠습니다. 숫자가 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]

By Sirakorn - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=85888768 / https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205

 

이렇게 복원추출된 각 데이터 셋들은 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

https://github.com/pilsung-kang/Business-Analytics-IME654-/blob/master/04%20Ensemble%20Learning/04-3_Ensemble%20Learning_Bagging.pdf

10개의 모델을 만들었다면, 이제 취합을 통해서 예측치를 내야합니다. 위의 예시는 분류문제입니다. 1로 예측한 모델의 갯수가 6개이므로 1로예측하게됩니다.  Training Accuracy(OOB Accuracy)로 결정하게 할 수도 있겠죠, 그래도 1로예측하게됩니다. 각 범주별로 확률을 내서 결정할 수도 있습니다. 이처럼 너무나도 다양한 방법이 존재하고 어느 하나가 항상 더 좋다라는 방법은 없습니다.

 

 

 

 

 

Stacking

https://miro.medium.com/max/875/1*5O5_Men2op_sZsK6TTjD9g.png / https://miro.medium.com/max/1250/1*avYNzmLUeqKr1zWPkn6cwg@2x.png

위에서 방법이 너무 많았습니다. 아예 함수로 만들어 버리는 것은 어떨까요? 각각 만들

어진 모델을 인자로 받는 새로운 모델을 만드는 것입니다 ! 각 모델이 예측에대한 결과를 내면, Meta-classifier라는 새로운 모델이 이 예측값들을 인자로 받아서 만드는 방법을 Stacking이라고 합니다. 이런 Layer를 많이 만들어줘서 딥러닝으로 사용하기도 합니다!

 

 

 

 

 

참고자료

 

 

Ensemble methods: bagging, boosting and stacking

Understanding the key concepts of ensemble learning.

towardsdatascience.com

 

Stacking Classifiers for Higher Predictive Performance

Using the Wisdom of the Multiple Classifiers to Boost Performance

towardsdatascience.com

 

pilsung-kang/Business-Analytics-IME654-

Course homepage for "Business Analytics (IME654)" @Korea University - pilsung-kang/Business-Analytics-IME654-

github.com

 

 

반응형

댓글