2019년 11월 20일 수요일

앙상블 모델 :: 베깅, 부스팅, 스태킹


앙상블 학습(Ensemble learning)


  • 앙상블이란 프랑스어로 조화, 통일을 의미한다
  • 앙상블앙상블 학습은 개별로 학습한 여러 학습기를 조합해 일반화 성능을 향상시키는 방법이라고 할 수 있다
  • 배깅(Bagging), 부스팅(Boosting), 스태킹(Stacking) 3종류로 나눌 수 있고 널리 알려진 랜덤포레스트(Randomforest) 모델은 배깅 방법에 속한다
  • 앙상블 모델은 보통 지도학습(supervised learning)에 사용되고 군집화나 학습데이터가 없는 아웃라이어 감지(outlier detection), 어노멀리 감지(anomaly detection), 클러스터링(clustering) 같은 것에는 쓰기 어렵다 (비지도학습에도 앙상블을 할 수 있다고 하는데 잘 쓰이지 않는다고함)

베깅(Bagging)



  • 베깅은 부트스트랩 어그리게이팅(Bootstrap AGGregING)의 약어로 샘플링을 다시 샘플링(Bootstrap) 하고 취합(AGGregING) 하는것 이다

  • 통계학에서는 중복을 허용한 리샘플링(resampling)을 부트스트래핑(bootstraping)이라 하고 이와 반대로 중복을 허용하지 않는 샘플링 방식을 페이스팅(pasting)이라고 한다
ex) 나의 경우에는 10만개의 데이터중 7만5천개의 데이터를 학습데이터로 사용한다

7만5천개의 데이터를 가지고 여러 데이터 셋으로 나눈다면 학습데이터가 부족해지고 이로인해 모형들이 편향이 생기거나 분산이 커지는 문제가 생길 수 있다

하지만 베깅의 경우 복원추출(resampling)을 하기때문에 어떤 데이터는 여러번 뽑힐수도있고 어떤 데이터는 한번도 뽑히지 않을 수 도 있다 때문에 75000개의 데이터를 가지고 75000번을 추출해도 75000가지의 서로다른 샘플데이터를 추출할 수 있게된다

이 특성을 이용해 조금씩 다른 모델들을 만들고 그것들의 결과를 취합하는것이다

데이터가 비슷하니 결과도 별 차이가 없다고 생각할 수 있지만 데이터가 빼곡해지는 효과가 있고 조금씩 다른 모델들이 투표를 하는 방식이므로 베깅으로 만들어진 앙상블 모델은 결과들에 대한 편차가 크지않고 안정적인 결과를 보여지도록 향상된다

학습데이터가 원래 편향이 있다면 그로 인한 편향문제까지는 해결하지 못하지만 미지의 데이터(Unseen data)에 상당히 괜찮은 성능을 보이고 노이즈나 아웃라이어에 대해서도 강해지는 것으로 알려져있다

보팅(Voting)


공부를 하다보니 보팅도 앙상블 학습의 한 부류로 취급하여 베깅, 부스팅, 스태킹, 보팅 4가지로 분류하는 경우도 있었다

  • 보팅은 투표, 선거 라는 뜻으로 뜻 그대로의 역할을 수행한다
  • 여러개의 머신러닝 알고리즘 모델을 학습시킨 후 새로운 데이터에 대해 각 모델의 예측값을 가지고 다수결 투표를 통해 최종 클래스를 예측한다
  • 보팅은 hard voting Classifier, soft voting Classifier 두가지로 나뉜다
voting
출처 https://stats.stackexchange.com/questions/349540/hard-voting-soft-voting-in-ensemble-based-methods/349556

Hard voting(단순 투표)



  • 위 사진의 경우는 hard voting 방식이다 4개의 분류 모델이 각 1, 1, 2, 1로 예측했다
  • 1 : 3표 , 2 : 1표 로 1이 더 많은 표를 받았으니 최종 예측 결과는 1이된다
  • hard voting은 Unanimous voting, Majority voting, Plurality voting으로 나뉜다
  • 만장일치 투표(Unanimous voting) : 만장일치일 때만 decision
  • 과반수 투표(Majority voting) : 다수결로 선택된 decision이 전체의 50%를 넘어야됨
  • 다수결 투표(Plurality voting) : --

Soft voting(가중치 투표)



  • soft voting은 앙상블에 사용되는 모든 분류기가 클래스의 확률을 예측할 수 있을때 사용한다
  • 각 분류기의 예측값은 1, 1, 2, 1 지만 해당 레이블을 선택할 확률은 다르기 때문에 확률을 가지고 평균을 구한 뒤 평균이 가장 높은 클래스로 최종 앙상블 예측이 이루어진다
  • 예) 0.9, 0.7, 0.6, 0.8 
            label 1 : (0.9 + 0.7 + 0.8) / 3 = 0.8 
            label 2 : 0.6 /1 = 0.6 
            label 1의 확률이 더 높으므로 최종 예측 결과는 1

부스팅(Boosting)


  • 부스팅은 가중치를 활용하여 약 분류기를 강 분류기로 만드는 방법이다
  • 베깅이 서로 독립적인 분류기를 만들고 결과를 통합하여 예측한다면 부스팅은 모델간에 영향을 준다
  • 모델이 예측을 하면 그 예측 결과에 따라 데이터에 가중치가 부여되고 새로운 모델을 만드는 위 과정이 반복된다
  • 오답에 대해서는 높은 가중치를 부여하고 정답에 대해서는 낮은 가중치를 부여한다 따라서 오답을 정답으로 맞추기 위해 오답에 더 집중할 수 있게 된다
출처 https://swalloow.github.io/bagging-boosting

스태킹(Staking)


  • 스태킹은 서로 다른 모델들을 조합해서 최고의 성능을 내는 모델을 생성한다
  • SVM, RandomForest, KNN 등 다양한 알고리즘을 사용할 수 있고 조합을 통해 서로의 장점은 취하고 약점은 보완할 수 있게된다
  • 하지만 많은 연산량을 가진다

댓글 없음:

댓글 쓰기