본문 바로가기

Enginius/Machine Learning

Boosting Methods

딥러닝 시대에 시대를 역행하는 부스팅 방법론들입니다. 

 - AdaBoost (https://en.wikipedia.org/wiki/AdaBoost)

 - Boosted Random Fern 


Ensemble Method는 크게 Bagging과 Boosting으로 나뉘며 각 특징은 다음과 같다. 

쉽게 생각해서 Bagging은 머리가 좋지만 고집이 쎈 놈들을 모아다가 의견의 평균을 내는 것이고, Boosting은 머리 안좋은 놈들을 많이 모아다가 특정 문제마다 강한 애들을 학습 데이터를 통해 골라서 각 사람의 의견의 가중치를 줘서 결정을 하는 것입니다. (개인적인 해석임) 


학습에 사용된 데이터와 검증에 사용된 데이터입니다. 

실험 결과 

======== Boosted Random Fern (7-depth 50 trees) ========

BFR train: 3.380 sec 

BFR test: 0.039 sec 

BRF Train Accuracy: 100.0% BRF Test Accuracy: 99.5% 

======== AdaBoost (350 decision stumps) ========

AdaBoost train: 8.364 sec 

AdaBoost test: 0.024 sec 

AdaBoost Train Accuracy: 100.0% AdaBoost Test Accuracy: 95.8%  

결과는 역시나 Boosted Random Fern이 더 좋습니다. 그 이유는 아래 decision surface를 보면 확실히 알 수 있습니다. 


Boosted Random Fern으로 학습된 decision surface와 AdaBoost로 학습된 decision surface

  

AdaBoost의 경우 decision stump를 weak learner로 사용하기 때문에 위와 같이 axis align되게 decision surface가 생성되게 됩니다. 그렇기 떄문에 데이터가 위와 같이 nonlinear하게 될 경우 generalization performance가 떨어질 수 밖에 없죠. 이에 반해 Boosted Random Fern은 kernel method 중에 explicit한 feature map이 있는 경우와 비슷한 효과가 납니다. 즉 데이터를 임의의 mapping (여기서는 fern의 output)을 통해서 고차원 공간으로 보내고, 이 공간에서 boosting을 하므로, 위에 decision surface와 같은 효과적인 결과가 나오게 됩니다. 


매트랩 코드 (코드는 짜집기임을 미리 밝히는 바입니다. 예전에 이것저것 받아놔서 어디서 받은지 출처를 모르겠..)