반응형
Light Gradient Boosting Machine (LightGBM)
1. 특징
- 머신러닝 부스팅 알고리즘 중 하나로, 가중치를 경사하강법으로 진행한다.
※ 머신러닝 부스팅 알고리즘: 앙상블 부스팅 기법으로, 틀린 부분에 가중치를 더하면서 진행하는 알고리즘.
machine learning ensemble, ensemble boosting 등이 있다.
※ 경사하강법: 1차 근삿값 발견용 최적화 알고리즘. 기본 개념은 함수의 기울기(경사)를 구하고, 경사의 절댓값이 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복시킨다. - leaf wise 트리분할
트리의 균형을 맞추지 않고 특정 리프 노드를 지속적으로 분할하여, 깊이가 늘어난 트리 생성.
어떤 리프 노드를 분할할까? max delta loss 값을 갖는 리프 노드!
→ 동일한 leaf 생성 시 손실을 줄일 수 있다.
※ level wise 트리분할: 균형있게 트리를 분할. 모든 leaf 를 분할하는 것. - xgboost의 단점을 보완: 학습시간이 빠르다. 하이퍼 파라미터가 적다.
2. 장점
- 대용량 데이터 처리가 가능
- 다른 모델들보다 더 적은 자원을 사용
- 빠름
- GPU 지원
3. 단점
너무 적은 수의 데이터를 사용하면 과적합 발생
→ 데이터의 개수(행의 수)가 10,000개 이상일 때 사용할 것을 추천
4. 파이썬에서 사용하기 (anaconda 사용)
▶ 설치
!conda install -c conda-forge -y lightgbm
▶ 모델 생성
n_estimators | 반복하려는 트리의 개수: 반복을 통해 더 좋은 모델을 찾아낸다 기본값은 100으로, 보통 1000 정도 해주면 좋다. 너무 크게 설정하는 경우 과적합이 발생할 수 있다. |
boosting | 부스팅 방법. 기본은 gbdt, 정확도가 중요할 때는 dart, 샘플링을 이용할 때는 goss. - gbdt : traditional Gradient Boosting decision tree - rt : random forest - dart : dropouts meet multiple additive regression tree - goss : gradient-based one-side sampling |
learning_rate | 학습률. 각 예측기마다 얼마나 가중치를 주어 학습할 것인지. 일반적으로 0.01 ~ 0.1 정도로 맞추고, 다른 파라미터를 튜닝한다. |
max_depth | 트리의 최대 길이. feature가 많다면 크게 설정하는 것이 좋다. -1로 설정하면 제한 없이 분기한다. |
min_child_samples | 리프 노드가 되기 위한 최소한의 샘플 데이터 수. 과적합 방지를 위해 잘 설정해야 한다. |
num_leaves | 하나의 트리가 가질 수 있는 최대 리프 개수. 모델 복잡성에 영향을 주는 주 요인. = 2^(max_depth) |
bagging_fraction | bagging에 사용할 데이터의 비율. 다양성을 높이는 방법으로, boosting을 goss로 하면 해당 파라미터 사용 시 에러. 0 < fraction <= 1. 절대 0 안됨! |
feature_fraction | 트리를 학습할 때마다 선택하는 feature의 비율. boosting이 rf일 때, rf는 feature의 일부만을 선택하여 훈련하는데, 이를 통제한다. 과적합 방지. 학습속도 향상. 1보다 작다면 매 iteration(tree)마다 다른 feature를 랜덤추출하여 학습한다. (0.8 → feature의 80%만 랜덤선택) |
early_stopping_round | validation set에서 평가지표가 n round동안 더 이상 향상되지 않으면 학습을 정지한다. |
reg_lambda | L2 regularization |
reg_alpha | L1 regularization. 정규화를 통해 과적합을 방지할 수 있지만, 정확도를 저하시킬 수도 있기 때문에 일반적으로 lambda, alpha 두 값 모두 기본값인 0으로 둔다. |
min_data_in_leaf | 한 리프 노드에 들어갈 수 있는 데이터의 개수. |
max_bin | 최대 bin (히스토그램의 bin 개수). 많이 주면 느려지지만 조금 더 이상적인 트리 분기를 찾는다. 기본값은 255. |
▶ 원하는 목표에 따른 파라미터 설정
- 더 빠른 속도
- bagging_fraction
- max_bin을 작게
- save_binary 사용
- parallel learning - 더 높은 정확도
- boosting: dart
- num_iteration을 크게
- learning_rate를 작게
- num_leaves를 크게: 과적합 발생할 수 있음
- max_bin을 크게 - 과적합 방지
- max_bin을 작게
- num_leaves를 작게
- min_data_in_leaf 사용
반응형
'Data Science : Study > 1. Python' 카테고리의 다른 글
Python : list (0) | 2022.08.27 |
---|---|
하이퍼파라미터 튜닝 : Coarse & Fine Search (0) | 2020.12.08 |
Python : csr_matrix (데이터의 수를 줄이는 방법) (0) | 2020.07.07 |
Python : (pandas) One- hot encoding (0) | 2020.05.29 |
Python : 데이터분석 - 모델 평가 (0) | 2020.05.25 |