분류 알고리즘 중에서 가장 많이 사용되는 것은 XGBoost와 랜럼 포레스트인 듯 하다. 그 이유는 성능이 가장 좋기 때문이다. 하지만, 학습하는데 시간이 오래 걸린다는 단점이 있다. 그래서 한 번 학습을 한 이후에 다시 재학습 하는 방법이 있는지 알아보았다. 확인결과 두 알고리즘 모두 초기모델을 구축한 후에 재학습이 가능했다. 마치 딥러닝 알고리즘처럼 데이터를 계속 흘리면서 재학습을 할 수 있는 것이다. 오늘은 XGBoost와 랜덤 포레스트(Random Forest)를 재학습하는 방법에 대해서 알아보았다.

 

 

빅데이터 알고리즘

 

 

1. 일반적인 모델 구축 프로세스를 상기해보자.

보통 [데이터 수집]-[전처리]-[분석]-[모델 학습]-[평가] 의 프로세스를 반복한다. 전처리한 데이터를 모델 학습에 모두 투입하여 모델을 구축한다. 그리고, 데이터가 추가되면 다시 모든 데이터를 투입하여 모델을 재구축한다.

하지만, 딥러닝 계열의 모델은 이런 식으로 모델을 학습한 경우, 시간이 너무 오래 걸려 학습시키기가 어렵다. 그래서, 데이터를 나눠서 학습시킨다. 학습한 파라미터를 저장했다가, 다시 불러와 이후부터 단계부터 학습을 하는 것이다.

XGBoost와 랜덤포레스트도 이와 동일한 방법으로 재학습이 가능하다.

 

 

2. XGBoost부터 알아자.

XGBoost 홈페이지를 보면 XGBoost의 사용방법이 잘 나와 있다. 이 중에 train함수를 보면, 입력파라미터로 xgb모델을 넣을 수 있다고 한다. 바로 아래 부분의 내용이다.

xgb_model (file name of stored xgb model or 'Booster' instance) – Xgb model to be loaded before training (allows training continuation).

 

연속해서 학습하는 것도 가능하다고 한다. XGBoost 알고리즘에 학습시킬 때, 입력파라미터로 이전에 학습한 모델을 넣어서 연속해서 학습할 수 있는 것을 알 수 있다. 해당 내용을 XGBoost 패키지 공식문서에서 보고 싶다면, 아래 링크를 확인해보자.

 

 

Python API Reference — xgboost 1.2.0-SNAPSHOT documentation

Python API Reference This page gives the Python API reference of xgboost, please also refer to Python Package Introduction for more information about python package. Core Data Structure Core XGBoost Library. class xgboost.DMatrix(data, label=None, weight=N

xgboost.readthedocs.io

 

 

3. 랜덤 포레스트(Random Forest)를 알아보자.

랜덤 포레스트는 파이썬 머신러닝 패키지인 Scikit-Learn 패키지에서 내용을 찾을 수 있다.

 

3.2.4.3.1. sklearn.ensemble.RandomForestClassifier — scikit-learn 0.23.2 documentation

 

scikit-learn.org

 

랜덤 포레스트 모델에 학습시키기 위해서는 RandomForestClassifier 모듈을 불러오고, 해당 클래스의 객체를 생성해야 한다. 이 때 필요한 입력 파라미터를 넣는다.

from sklearn.ensemble import RandomForestClassifier

from sklearn.datasets import make_classification

 

clf = RandomForestClassifier(max_depth=2, random_state=0)

 

이 때 warm_start를 True로 하면, 학습한 모델을 불러와서 다시 학습을 시킬 수 있다.

warm_start
bool, optional (default=False)
When set to True, reuse the solution of the previous call to fit and
add more estimators to the ensemble, otherwise, just fit a whole new forest.

 

하지만, 상세한 내용을 보면 약간의 제약 사항이 있다. 모델을 생성할 때 입력한 파라미터를 수정할 수 없다고 한다. 예를 들어, tree의 갯수(n_estimators)를 증가시킬 수는 있지만 줄일 수는 없다.

 

warm_start는 일부 모델 및 매개 변수값에만 적용할 수 있다. 랜덤 포레스트를 구축하여 트리를 추가하는 경우에는(n_estimators 증가) 사용할 수 있지만, 트리를 줄이는 경우에는 사용할 수 없다. 가급적 입력 파라미터를 변경하지 않는 경우에 warm_start 옵션을 사용하는 것이 좋겠다.

 

warm_start는 초기에 일부 데이터로 학습한 후, 전체 데이터 셋의 fine-tune the parameter를 찾기 위해서도 사용할 수 있다. 전체 데이터셋의 최적 파라미터를 찾기에 시간이 너무 오래 걸릴 때, 이 방법을 이용하면 시간을 많이 줄일 수 있을 듯 하다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">