Light GBM은 XGBoost와 함께 부스팅 계열 알고리즘에서 가장 각광받고 있는 모델 중 하나이다.
Light GBM의 가장 큰 장점은 역시나 학습에 걸리는 시간이 훨씬 빠른 것이다.
XGBoost나 GBM을 이용하여 학습을 진행해본 사람들은 알겠지만, GridSearchCV를 이용하여 하이퍼 파라미터를 튜닝할 때 시간이 매우 오래걸린다는 단점이 있다.
이를 해결하기 위해 "Light" GBM이 개발되었다.
속도가 개선된 것은 사실이지만, LightGBM은 한가지 단점이 존재한다.
바로, 적은 데이터 세트에 적용할 경우 과적합이 발생하기 쉽다는 것이다. 따라서 일반적으로 10,000건 이하의 데이터 세트에는 잘 사용되지 않는다.
- LightGBM
LightGBM은 리프 중심 트리 분할(Leaf Wise) 방식을 사용한다.
기존의 대부분 트리 기반 알고리즘은 균형 트리 분할(Level Wise) 방식을 사용한다.
즉, 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문에 트리의 깊이가 최소화 될 수 있고, 균형잡힌 트리를 유지하면 오버피팅에 보다 더 강력한 알고리즘을 가질 수 있기 때문이다.
하지만, LightGBM의 리프 중심 트리 분할 방식은 트리의 균형을 맞추지 않고, 최대손실값(max delta loss)을 가지는 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성된다.
이렇게 생성된 리프 노드를 지속적으로 분할해 생성된 규칙 트리는 학습을 반복할수록 결국은 균형 트리 분할 방식보다 예측 오류 손실을 최소화 할 수 있다는 것이 LightGBM의 구현 사상이다.
LightGBM의 장점을 다음과 같이 정리할 수 있다.
- 더 빠른 학습과 예측 수행시간
- 더 적은 메모리 사용량
- 카테고리형 피처의 자동 변환과 최적 분할 (원-핫 인코딩 등을 사용하지 않고도 카테고리형 피처를 최적으로 변환하고 이에 따른 노드 분할 수행)
- LightGBM 하이퍼 파라미터
Hyperparameter | default | mean |
num_iterations | 100 | 반복을 수행하는 트리의 갯수를 지정 n_estimators와 같은 파라미터 |
learning_rate | 0.1 | 0 ~ 1 값을 지정 부스팅 스텝을 반복적으로 수행할 때 업데이트되는 학습률 값 |
max_depth | -1 | 0보다 작은 값을 입력하면 깊이에 제한이 없음 LightGBM은 리프중심트리분할 방식을 사용하기 때문에 일반 트리구조 알고리즘보다 깊이가 더 깊음 |
min_data_in_leaf | 20 | min_samples_leaf와 같은 파라미터 최종 결정 클래스인 리프 노드가 되기 위해서 최소한으로 필요한 레코드 수 과적합 제어 |
num_leaves | 31 | 하나의 트리가 가질 수 있는 최대 리프 갯수 |
boosting | "gbdt" (일반적인 그래디언트 부스팅 결정트리) |
부스팅의 트리를 생성하는 알고리즘 기술 - rf (랜덤 포레스트)도 사용가능 |
bagging_fraction | 1.0 | 데이터를 샘플링하는 비율 지정 subsample 파라미터와 동일 |
feature_fraction | 1.0 | 개별 트리를 학습할 때, 무작위로 선택하는 피처의 비율 과적합 제어 xgb의 colsample_bytree와 같은 파라미터 |
lambda_l2 | 0 | L2 regulation 제어 reg_lambda로 변경해서 사용 |
lambda_l1 | 0 | L1 regulation 제어 reg_alpha로 변경해서 사용 |
- 하이퍼 파라미터 튜닝 방안
num_leaves의 갯수를 중심으로 min_child_samples(min_data_in_leaf), max_depth를 함께 조정한다.
learning_rate를 작게 하면서 n_estimators를 크게 하는 것은 부스팅 계열 튜닝에서 가장 기본적인 튜닝방안이다.
- 파이썬 래퍼 LightGBM, 사이킷런 래퍼 XGBoost, LightGBM 하이퍼 파라미터 비교
유형 | 파이썬래퍼 LightGBM | 사이킷런 래퍼 LightGBM | 사이킷런 래퍼 XGBoost |
파라미터명 | num_iterations | n_estimators | n_estimators |
learning_rate | learning_rate | learning_rate | |
max_depth | max_depth | max_depth | |
min_data_in_leaf | min_child_samples | ||
bagging_fraction | subsample | subsample | |
feature_fraction | colsample_bytree | colsample_bytree | |
lambda_l2 | reg_lambda | reg_lambda | |
lambda_l1 | reg_alpha | reg_alpha | |
early_stopping_round | early_stopping_rounds | early_stopping_rounds | |
num_leaves | num_leaves | ||
min_sum_hessian_in_leaf | min_child_weight | min_child_weight |
'Data Analysis > Python' 카테고리의 다른 글
파이썬 문자열 결측치 처리 (0) | 2023.04.14 |
---|---|
사이킷런 래퍼 XGBoost (0) | 2023.03.05 |
파이썬 래퍼 XGBoost 예제 - 위스콘신 유방암 예측 (0) | 2023.03.05 |
XGBoost_하이퍼파라미터 (0) | 2023.02.28 |
분류_GBM(Gradient Boost Machine) (0) | 2023.02.01 |