데이터분석/기초통계

LightGBM 주요 파라미터 정리

늘근이 2018. 8. 5. 21:46

2018년을 풍미하고있는 lightGBM의 파라미터를 정리해보도록 한다.

생각보다 한국 문서는 많이 없는데, 데이터 사이언스가 엄청 히트를 치는데도 불구하고 생각보다 이정도 까지 트렌드를 쫓아가면서 해보는 사람은 그다지 많이 없는듯하다.

lightgbm 논문을 참고해보면, 

https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree.pdf

GOSS(Gradient-based One-Side Sampling)을 통해 데이터의 일부만으로 빠르게 정보이득을 계산하고 있고, EFM(Exclusive Feature Bundling)을 통해 Feature를 획기적으로 줄이므로써, 시대를 풍미했던 xgboost를 속도면에서 (또는 정확도면에서나...) 확 제쳐버렸다.

마른수건짜내듯이 정확도를 높이는 경진대회에서는 속도가 엄청 빠른 lightGBM이 대세가 될수밖에 없다. 조금씩 파라미터를 바꾸면서 잘되나 봐야하고, 이것저것 테스트 해야하기 때문이다.

실제로, 실무데이터는 미친듯이 많은 0 데이터와, 범주형 변수들이 떠다니는데, 범주형 변수를 원핫인코딩 할경우 거의 계산불가 상황이 오기 마련인데 lightgbm은 이런점에서 더욱 강점으로 보이며, 아예 종류가 천개 이상인 ID와 비슷한 변수를 범주형 변수로 바꿔서 집어넣어도 무리없이 빨리 돌아간다.


또한 하도 인기가 많은 방법인 부스팅의 일종이라 조정할수 있는 파라미터가 상당히 많은데, 아래와 같다.


max_depth : 나무의 깊이. 단일 결정나무에서는 충분히 데이터를 고려하기 위해 depth를 적당한 깊이로 만들지만, 부스팅에서는 깊이 하나짜리도 만드는 등, 깊이가 짧은것이 크리티컬하지 않다. 어차피 보정되니까..

min_data_in_leaf : 한 잎사귀 노드에 들어갈수 있는 데이터의 갯수.

feature_fraction : 부스팅 대상 모델이 랜덤포레스트일때, 랜덤포레스트는 feature의 일부만을 선택하여 훈련하는데, 이를 통제하기 위한 파라미터.

bagging_fraction : 데이터의 일부만을 사용하는 bagging의 비율이다. 예를들어 오버피팅을 방지하기 위해 데이터의 일부만을 가져와서 훈련시키는데, 이는 오버피팅을 방지하며 약한예측기를 죄다 합칠경우는 오히려 예측성능이 좋아질것이다.

early_stopping_round : 더이상 validation데이터에서 정확도가 좋아지지 않으면 멈춰버린다. 훈련데이터는 거의 에러율이 0에 가깝게 좋아지기 마련인데, validation데이터는 훈련에 사용되지 않기때문에 일정이상 좋아지지 않기 때문이다. 이후 진행하게 되면 컴퓨터 재능낭비다.

lambda : 정규화에 사용되는 파라미터

min_gain_to_split : 최소 정보이득이 있어야 분기가 되게끔 만든다.

max_cat_group : 범주형 변수가 많으면, 하나로 퉁쳐서 처리하게끔 만드는 최소단위.

objective : lightgbm은 regression, binary, multicalss 모두 가능

boosting: gbdt(gradient boosting decision tree), rf(random forest), dart(dropouts meet multiple additive regression trees), goss(Gradient-based One-Side Sampling)

num_leaves: 결정나무에 있을 수 있는 최대 잎사귀 수. 기본값은 0.31

learning_rate : 상당히 중요한 파라미터인데, 각 예측기마다 얼마나 가중치를 주어 학습하게 할것인지 만든다. learning_rate은 아래의 num_boost_round와 잘 맞춰져야 ㅎ나다.

num_boost_round : boosting을 얼마나 돌릴지 지정한다. 경험상 보통 100정도면 너무 빠르게 끝나며, 시험용이 아니면 1000정도는 준다. 어차피 early_stopping_round가 지정되어있으면 더이상 진전이 없을경우 알아서 멈춘다.

device : gpu, cpu

metric: loss를 측정하기 위한 기준. mae (mean absolute error), mse (mean squared error), 등등이 있다. 사실 엄청많다.

max_bin : 최대 bin

categorical_feature : 범주형 변수가 있을때 여기에 언급해준다. 다만, categorical은 string은 쓸수 없는것으로 보인다.

ignore_column : 컬럼을 무시한다. 무시하지 않을경우 모두 training에 넣는데, 뭔가 남겨놓아야할 컬럼이 있으면 여기다가 인자를 준다.

save_binary: True로 해놓으면 메모리를 아낀다.



참조 사이트

https://medium.com/@pushkarmandot/https-medium-com-pushkarmandot-what-is-lightgbm-how-to-implement-it-how-to-fine-tune-the-parameters-60347819b7fc