여기서 소개하는 머신러닝 기법은 앙상블(Ensemble)이라는 기법 중 하나인 부스팅(Boosting)이며, 학습 모듈은 GBM(Gradient Boosting Machine), 학습 데이터 셋은 Human Activitity Recognition Using Smartphones Data set이다. 부스팅 방식은 이전의 분류기에서 예측 실패한 데이터에 대해 가중치를 부스팅하면서 성능을 올린다. GBM은 그 과정에서 Gradient Descent를 사용한다. 내 노트북으로 그 코드를 실행하면, 학습 시간이 많이 소요된다. 튜닝은 말할 것도 없이 더 많이 소요될 것이다.
컴퓨터로 GBM의 학습 결과를 확인해봤다. 정확도는 0.9393, 학습시간은 약 10분. 좋은 성능을 보여준다.
GBM학습에는 하나의 코어밖에 사용하지 못해서, 멀티코어를 가진 컴퓨터에서도 속도가 그닥 빠르지는 않다. GPU도 지원하지 않는다. 그야말로 답답이.
GBM을 튜닝하면 어떨까? Hyper Parameter 후보는 아래와 같다.
학습률: [0.02, 0.05, 0.1], weak learner 개수: [100, 300, 500], 데이터 샘플링 비율: [0.5, 1]
GridSearchCV로 튜닝한 후 정확도를 측정하는 이 과정은 약 1시간 가량 소요된다. 정확도는 0.9393에서 0.9430으로 올랐다. 약 0.4%p 증가했다. 확실히 하이퍼 파라미터 튜닝은 시간 대비 성능 향상 정도가 낮다. 그래도 이정도면 의미 있다고 본다.
GridSearchCV는 멀티 코어 컴퓨팅을 지원하기 때문에, n_jobs라는 parameter에 -1(모든 코어 사용)을 지정했다. 아래는 16개의 코어가 일하는 모습이다.
당연히도, 개선된 모델들이 있다. (XGBoost, LightGBM, etc.) GBM은 공부 목적으로만 보자...
튜닝: 머신러닝 모델을 튜닝하기 위해 "hyper parameter"이라는 사용자 지정 값을 변경해가며 정확도를 측정하는데, 소요시간은 가짓 수 X 1회 학습 시간이므로 시간이 굉장히 많이 걸린다.