LightGBM
XGBoost 이후로 나온 최신 부스팅 모델
- 리프 중심 트리 분할 방식 사용
- 종속변수가 연속형 데이터인 경우든 범주형 데이터인 경우든 모두 사용할 수 있음
- 이미지나 자연어가 아닌 표로 정리된 데이터라면 거의 모든 상황에서 활용할 수 있음
장점 | 단점 |
XGBoost보다도 빠르고 높은 정확도를 보여주는 경우가 많음 | 복잡한 모델인 만큼, 해석에 어려움이 있음 |
예측에 영향을 미친 변수의 중요도를 확인할 수 있음 | 하이퍼파라미터 튜닝이 까다로움 |
변수 종류가 많고 데이터가 클수록 상대적으로 뛰어난 성능을 보여줌 |
코드
import lightgbm as lgb
model = lgb.LGBMClassifier(random_state=100)
model.fit(X_train, y_train)
pred = model.predict(X_test)
하이퍼파라미터
- n_estimators: 반복 횟수
- learning_rate: 러닝 레이트
- lambda_l1: L1 정규화
- lambda_l2: L2 정규화
- max_depth: 최대 깊이
- subsample: 서브샘플 비율
LightGBM의 train() 함수
lgb.train() | lgb.LGBMRegressor.fit() / lgb.LGBMClassifier.fit() | |
검증셋 | 모델링 과정에 검증셋 지원 | 모델링에 검증셋 포함하지 않음 |
데이터셋 | 데이터프레임을 별도의 포맷으로 변환 필요 | 별도의 포맷 필요 없이 자동적으로 처리 |
하이퍼파라미터 | 무조건 지정해야 함 | 기본값으로도 모델링 가능 |
사이킷런과 연동(Gridsearch, CV 등) | 불가 | 가능 |
train() 함수에서는 검증셋을 함께 사용
- 트리를 계속해서 만들어나갈 때 훈련셋이 아닌 검증셋으로 평가를 해가며 모델을 개선해 나감
- 모델링이 완료되면, 사용하지 않은 시험셋으로 최종 예측 및 평가를 진행
- train() 함수로 학습하려면 LightGBM에서 제시하는 고유한 데이터셋 형태를 취해야 함 - Dataset() 함수
- train() 함수는 하이퍼파라미터가 입력되지 않으면 에러가 나기 때문에 반드시 하이퍼파라미터를 입력해야 함
모델 이해
XGBoost와 LightGBM의 가장 큰 차이점: 트리의 가지를 어떤 식으로 뻗어나가는가
- XGBoost는 균형 분할 방식으로, 각 노드에서 같은 깊이를 형성하도록 한층 한층 밑으로 내려옴
- LightGBM은 리프 중심 트리 분할 방식으로, 특정 노드에서 뻗어나가는 가지가 모델의 개선에 더 도움이 된다면 좌우 노드 수가 균등하지 않고 가지가 깊게 펼쳐짐
LightGBM은 속도가 훨씬 빠르게 진행될 수 있으며, 복잡성은 더 증가하고, 오버피팅 문제를 야기할 가능성 또한 높음
- 하이퍼파라미터 튜닝으로 극복 가능
XGBoost 대비 LightGBM의 장점
- 빠른 학습 및 예측
- 더 적은 메모리 사용
- 데이터셋 자동 변환 및 최적 분할
참고: 데싸노트의 실전에서 통하는 머신러닝
반응형