저렴한 시스템에서 대용량 데이터 학습하기
데이터 레코드가 10만개 정도, 그러나 필드가 500개. 그러나 분석가가 가지고 있는 R 시스템은 정말 아주 일반적인 시스템이라 하자. 예를 들어 윈도우 7 32bit, 4GB램…
위의 상황일때 지금같으면 램을 증설하고 윈도우 7 64비트 OS로 바꾸는 작업을 할텐데, 이런 쉬운 결정이야 지금에야 어느정도 가능하지만 불과 몇년전 까지만 해도 간단한 일이 아니었다.
아래 이야기 하는 아이디어는 대부분의 시스템의 R 환경에서 데이터가 대용량일 경우 학습의 문제가 생길시 하나의 팁으로 예전 KDD 98년도 데이터 마이닝 대회에서 사용되었던 방법이다.
변수가 많아서 생기는 문제중에 하나는 학습에 시간이 너무 많이 걸린다는 것이며, 어떤 경우에는 학습도 안되는 경우가 있다. 이럴때 가장 접근하기 좋은 방법은 수많은 변수중에서 관련성 있는 변수만을 골라서 모델을 빌드하는 것이나, 이 또한 선택의 문제가 있기 때문에 쉽지가 않다.
KDD 98년도 대회에서 사용되었던 방법은 이랬다.
- 적당한 수준으로 학습셋과 테스트셋을 나눈다.(70:30)
- 학습셋에 대해서 20여개의 학습셋으로 샘플링을 해 각 샘플셋에서 하나의 모델을 생성해 20개의 모델을 생성한다.
- 이들 각 모델에서 쓰인 변수들을 모두 모아 이들 변수만을 기반으로 전체 학습셋에 대해서 학습을 시켜 모델링을 수행한다.
- 생성된 모델을 평가한다.
KDD에서는 400여개의 변수에서 60여개의 변수셋으로 위 과정을 거쳐 선택이 되었다고 한다.
이런 방법도 있으나, 레코드들에 대해서 샘플링을 하는게 아닌, 변수들에 대해서 랜덤 샘플링을 수행해 개별 학습을 수행하고 이들에서 유용한 변수만을 추려 최종 모델을 만드는 방법도 있는데, 이는 RandomForest와 상당히 유사한 방법이라 할 수 있다.
변수의 레벨이 많아서 학습에 문제가 되는 경우가 있는데, RandomForest의 경우 32개 이상의 레벨이 있는 명목형 변수는 아예 학습이 되질 않는 경우도 있고, 이들 레벨이 많아 버리면 학습 시간이 정말 오래 걸리는 문제가 있다. 이때에는 적은 레벨로 변수를 변환시키는 작업도 필요하다.
기계학습이나 데이터마이닝의 실무적인 성격은 과학의 영역이라기 보다는 테크닉 혹은 기예의 영역이라는 말씀을 모 교수님이 하신걸 기억하는데, 아마도 이번 포스팅은 그 말씀과 관련이 있는 포스팅이 아니었나 싶다.
저렴한 시스템에서 대용량 데이터 학습하기 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.