머신러닝이던 딥러닝이던, 결국 모델이 달라지는 것은 코드 조금 수정하는 차이기 때문에
크게 중요하지 않아진다. 모델을 바꾸는 것보다 중요한 건 데이터를 들여다 보는 일이라고 한다.
결국..나는 평생 데이터의 노예가 되어야 할 것 같다..!ㅎ힣
테슬라의 수석 엔지니어 중 한 분이 어느 세미나 자리에서 이야기를 하시기도 했고,
딥러닝 분야에서 유투브로도 많이 유명하신 앤드류 응 님께서도 이 이야기를 하셨다고 하니
정말 불변의 법칙 인 것 같다. 데이터가 가장 중요하도다..
룰루
그래서 늘 모델보다도 데이터에서 답을 얻으려고 노력해야 한다.
앙상블 기법 Ensemble Learning 이란 여러 개의 개별 모델을 조합하여 최적의 모델로 일반화하는 방법입니다. weak classifier 들을 결합하여 strong classifier 를 만드는 것입니다. decision tree 에서 overfitting 되는 문제를 앙상블에서는 감소시킨다는 장점이 있습니다.
앙상블 기법에는 보팅voting, 배깅bagging, 부스팅boosting, 스태킹stacking이 있습니다.
bagging은 bootstrap aggregation 의 약자입니다. 샘플을 여러번 뽑아서(bootstrap) 각 모델을 학습시킨 다음 결과물을 집계(aggregation) 하는 방법입니다. 복원 랜덤 추출한 데이터들로 모델을 학습시킵니다. Categorical Data 는 투표방식voting으로 집계하고 Continuous Data는 평균으로 집계합니다.
Categorical Data 일 때, 투표 방식으로 한다는 것은 전체 모델에서 예측한 값 중 가장 많은 값을 최종 예측값으로 선정한다는 것입니다. 6개의 결정 트리 모델이 있다고 합시다. 4개는 A로 예측했고, 2개는 B로 예측했다면 투표에 의해 4개의 모델이 선택한 A를 최종 결과로 예측한다는 것입니다. Continuous Data 일 때, 평균으로 집계한다는 것은 말 그대로 각각의 결정 트리 모델이 예측한 값에 평균을 취해 최종 Bagging Model의 예측값을 결정한다는 것입니다.
학습데이터가 충분하지 않더라도 충분한 학습효과를 낼 수 있습니다. 그래서 높은 bias의 underfitting 문제나 높은 variance의 overfitting 문제에 도움이 됩니다.
대표적으로 Random Forest 모델이 있습니다.
보팅과 배깅은 위 사진처럼 차이점이 있습니다. Voting은 각각 다른 알고리즘을 이용한 분류기를 결합하는 방식으로 최종 예측 값을 투표하는 방식입니다. Bagging은 서로 같은 알고리즘을 이용한 분류기가 데이터 샘플링을 각자 다르게 가져가면서 학습을 수행하는 방식입니다.
배깅에서 각각의 모델이 독립적으로 학습하는 반면, 부스팅은 이전 모델의 학습이 다음 모델의 학습에 영향을 미칩니다. 이전 모델의 학습 결과에 따라 오답에 대해서는 높은 가중치를 부여하고 정답에 대해서는 낮은 가중치를 부여하여 부여된 가중치가 다음 모델에 영향을 미치는 것입니다. 잘못 분류된 데이터에 집중해서 새로운 분류 규칙을 만드는 과정을 반복합니다.
대표적으로 Gradient Boost, XGBoost, LightGBM, AdaBoost 가 있습니다.
배깅과 부스팅의 공통점은 전체 데이터 집합으로부터 복원 랜덤 샘플링으로 훈련 집합을 생성하는 것입니다. 차이점은 배깅은 병렬학습이고 부스팅은 순차학습입니다. 또한,
(배깅) 균일한 확률분포에 의해 훈련집합을 생성함. (부스팅) 분류하기 어려운 훈련 집합 생성.
(배깅) 과대적함에 강함. (부스팅) 오답에 더 집중할 수 있기 때문에 높은 정확도. 하지만 과대적합의 가능성이 있음.
(배깅) 특정영역에서 정확도 낮음. (부스팅) 이상치, 결측치에 취약.
부스팅이 배깅보다 일반적으로 시간이 오래 걸림.
스태킹은 CV(cross validation)기반으로 개별 모델이 예측한 데이터를 다시 meta dataset 으로 사용하여 최종 모델 Meta Learner 에서 학습하는 방식입니다.
Base Learner (model stack) 에서 동일한 데이터 원본을 가지고 학습하게 되면 overfitting의 문제가 발생합니다.
따라서 데이터셋을 k 번 나누어 train set 과 test set 에 활용합니다. (k-fold CV) 아래의 두번째 그림을 보면 trading folds 와 validation fold로 나누게 되는데 이 과정을 k 번 반복한다는 의미입니다.