분류 문제에서 앙상블 방법.

일전에 Decision Tree나 SVM, ANN 등등 많은 분류기 모델을 공부했는데, 이것들에서 파생되는 많은 분류기를 또 다시 공부해야 하나 하는 생각을 한적이 있었다. 하지만 이것은 기우에 불과했고, 많은 새로운 분류 방법들이 훈련집합이나 입력특징, 클래스 레이블을 조작하면서 얻어지는 앙상블 방법들중에 하나였음을 알게 되었다. (어제 데이터 마이닝 수업시간의 주제였다.)

일반적으로 단일의 분류기의 모델만을 빌드해서 실제 실무에서 사용하지는 않는다.
그러니까 여러 모델을 빌드하고 그들의 voting을 받아서 클래스 판정을 하는 방법들이 있는데 이것들을 앙상블(ensemble)방법이라고 한다.

앙상블 분류기는 그것을 구성하는 기본 분류기들의 반 이상이 잘못 분류하는것에 대해서 잘못된 예측을 수행한다.
연구결과에 따르면 기본 분류기의 오류율이 0.5가 넘어가면 앙상블 분류기의 오류가 급격하게 안좋아 진다는 결과가 있는데 0.5 정도의 오류율이면 동전던지기나 마친가지 여서 분류기라고 할 수도 없을 것이다. 0.5 이하의 오류율을 가진다면 앙상블 분류기가 훨씬 더 좋은 성능을 보여 준다고 한다.
그러니 대부분 제대로 feature를 뽑아 학습 시키고 했으면 0.5이상의 정확도가 나올테고 그렇다면 앙상블 방법으로 성능향상을 꾀하는 것도 나쁘지 않을것이다.

사용자 삽입 이미지기본 분류기의 오류율을 통해서 본 앙상블 분류기의 오류율(from I.D.M)

분류쪽을 보자면 이상한 분류기들의 이름이 많은데, 예를 들어 Boosting Decision Tree, Random forest 등등 이런것들은 이런 앙상블 방법중에 하나를 사용해서 기본분류기를 구성한 것일라 보면 된다.

여기서 훈련 집합을 조작함으로서 성능향상을 꾀하는 앙상블 방법인 Boosting과 Bagging에 대해서 정리해 보겠다.

Bagging은 훈련집합을 들 가운데 훈련 튜플을 뽑는 방법을 균일한 확률 분포에 따라 반복적으로 셈플링을 해서 모델을 여러개 빌드하는 방법이다. 다른말로는 Bootstrap aggregation이라고도 불리운다. 그렇게 만든 여러 모델을 가지고 테스트 튜플을 입력해 다수의 모델이 분류한 클래스를 선택해서 결론을 짓는것이다. 확률적으로 학습셋에서 63%정도의 데이터가 선택되어 학습이 되어지고 나머지 37%로 테스팅을 할 수 있을것이다.

Boosting 방법은 모델을 빌드할때 이전 모델에서 오분류한 학습데이터를 다음 모델이 빌드될때 학습 튜플로 선택되어질 가능성을 높여줘서 다음 모델에서 오류에 대한 보완을 하게끔 유도하는 방법이다. Boosting Decision Tree 같은건 Decision Tree를 여러개 위의 과정을 통해 빌드하고 voting하는 과정을 통해 분류를 하는것이다.

위의 위키에서 보자면 앙상블 방법은 데이터 스토리지를 증가시키고, 컴퓨테이션 리소스를 많이 먹으며, 결과에 대해 이해도를 반감시키는 단점이 있다.
하지만 내 생각애는 여러 분류기를 만들고 테스팅 하는데 이러한 작업들을 병렬로 충분히 처리할 수 있으므로 큰 문제는 되지 않을거란 생각도 해본다.
물론 왜 이런 결과가 나왔는지 이해하고 커스터마이징 하기는 분류기 하나를 사용하는것 보다 복잡한 문제겠지만 대체적으로 성능이 좋다고 알려져 있으니 알아두면 좋을 것이다.

어제 수업시간에 이것 말고도 ROC Curve에 대해서도 배웠는데 참 흥미로웠다.

CC BY-NC 4.0 분류 문제에서 앙상블 방법. by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.