일상

2024-07-08

crapy 2024. 7. 9. 07:18

여기서 소개하는 머신러닝 기법은 앙상블(Ensemble)이라는 기법 중 하나인 부스팅(Boosting)이며, 학습 모듈은 GBM(Gradient Boosting Machine), 학습 데이터 셋은 Human Activitity Recognition Using Smartphones Data set이다. 부스팅 방식은 이전의 분류기에서 예측 실패한 데이터에 대해 가중치를 부스팅하면서 성능을 올린다. GBM은 그 과정에서 Gradient Descent를 사용한다. 내 노트북으로 그 코드를 실행하면, 학습 시간이 많이 소요된다. 튜닝은 말할 것도 없이 더 많이 소요될 것이다. 

 

 

 

 

GBM 학습 결과

 

컴퓨터로 GBM의 학습 결과를 확인해봤다. 정확도는 0.9393, 학습시간은 약 10분. 좋은 성능을 보여준다.

 

 

 

 

단일 코어만 엄청나게 고생하는 모습, 코어가 16개나 있는데...

 

 

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회 학습 시간이므로 시간이 굉장히 많이 걸린다.